freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c內(nèi)存池設(shè)計(更新版)

2025-09-14 10:52上一頁面

下一頁面
  

【正文】 pTemp = pTempnext。 //將分配的線程池內(nèi)存與鏈表節(jié)點關(guān)聯(lián) LinkMemeryToNode(amp。 m_AllNumber = m_AllNumber + m_Number。 m_Headnext = NULL。 m_MemePoolUseSize = 0。 //保存請求分配內(nèi)存用戶信息 void **m_User。 //內(nèi)存塊總 的數(shù)目 size_t m_AllNumber。 void CleatAllLinkNode()。 void LinkMemeryToNode(EigthByte *PAlloc)。 //獲取錯誤信息 void GetErrorInfo()。sMemoryChunkSize = DEFAULTMEMENODESIZE)。 //分配的節(jié)點的后一節(jié)點 TMemeNode *pEndNode。 namespace MemePool { typedef unsigned char EigthByte。 釋放內(nèi) 存池 : 首先釋放向系統(tǒng)申請的內(nèi)存塊,之后在清空所有的雙向鏈表。 由 realloc 函數(shù)定義可知,新分配的內(nèi)存空間可能是在原有的內(nèi)存基礎(chǔ)上擴充,還有可能是在另外的一個地方新開辟一塊內(nèi)存。因此使用 C 語言的realloc 函數(shù)來滿足要求。后面會詳細(xì)介紹。為此,需要設(shè)計一個通用的內(nèi)存池來完成相關(guān)的分配和釋放的工作。 對象內(nèi)存分配 : 對內(nèi)存的鏈表指針分配好后,用戶可以使用內(nèi)存池進(jìn)行內(nèi)存分配,對于用戶的內(nèi)存分配有兩種 情況,一種是在現(xiàn)有的內(nèi)存池中能找到合適的內(nèi)存塊,另一種情況是現(xiàn)有內(nèi)的內(nèi)存池沒有足夠的內(nèi)存塊來分配,需要重新向系統(tǒng)申請內(nèi)存來滿足用戶的需求。 //新的大小一定要大于原來的大小,不然的話會導(dǎo)致數(shù)據(jù)丟失! 頭文件: include 有些編譯器需 要 include ,在 中可以使用 頭文件 功能:先判斷當(dāng)前的指針是否有足夠的連續(xù)空間,如果有,擴大 mem_address 指向的地址,并且將 mem_address 返回,如果空間不夠,先按照 newsize 指定的大小分配空間,將原有數(shù)據(jù)從頭到尾拷貝到新分配的內(nèi)存區(qū)域,而后釋放原來 mem_address 所指內(nèi)存區(qū)域(注意:原來指針是自動釋放,不需要使用 free),同時返回新分配的內(nèi)存區(qū)域的首地址。因為原有指向的內(nèi)存已經(jīng)不存在了,因此指向它的指針將失效,原有分配的對象 也將失效。 2, 如果之前得到內(nèi)存的對象,在新內(nèi)存分配前有指針復(fù)制操作,原有對象可以通過保存的指針地址進(jìn)行重定向,但是之前分別的對象不能保證。 //內(nèi)存初始分配內(nèi)容 二進(jìn)制位 1111 1111 static const int NEW_ALLOCATED_MEMORY_CONTENT = 0xFF。 //使用者對象的地址 void **pUser。sSize)。 operator =(CMemePool amp。sSize)。 //雙向鏈表的當(dāng)前節(jié)點 TMemeLinkNode *m_Current。 //內(nèi)存塊總分配大小 size_t m_AllAloctsize。 // //recalloc 分配新內(nèi)存后,之前指向舊內(nèi)存的指針就失效了 //需要重新定位,之前分配對象的指向也要重新定位 namespace MemePool { /***************************************** 內(nèi)存池構(gòu)造函數(shù) by 風(fēng)清揚 song 130728 *****************************************/ CMemePool::CMemePool(const size_t amp。 m_Number = 0。 m_isFirst = true。 //追加分配內(nèi)存,原有內(nèi)存的內(nèi)容不會受到影響 m_PAlloc = (EigthByte *)realloc(m_PAlloc,(m_AllAloctsize)*sizeof(EigthByte))。 int iIndex = 0。 } /***************************************** 計算內(nèi)存池真正分配的內(nèi)存的大小 by 風(fēng)清揚 song 130728 *****************************************/ void CMemePool::CalMemeSize() { m_MemePollSize = (size_t)(m_Number * m_MemLinkSize)。 m_LastNode = PNode。PAlloc[iIndex * m_MemLinkSize]。 } /***************************************** 更新當(dāng)前節(jié)點的前后大小值 by 風(fēng)清揚 song 130728 *****************************************/ void CMemePool::UpdateLinkNodeSize(TMemeNode *PNode) { TMemeNode *PTemp。amp。 //保存請求內(nèi)存分配的用戶信息 m_User = p。 } //跳過已經(jīng)分配的節(jié)點 if(true == m_CurrentisUsed) { m_Current = m_CurrentpEndNode。 return FindMemeNode(sSize)。 false == m_CurrentisUsed) { CalNeetLinkNumber(sSize)。 return pTempData。 } //恢復(fù)內(nèi)存為初始化 //memset(((void *) pFindData), NEW_ALLOCATED_MEMORY_CONTENT, sSize) 。 while(NULL != PTemp) { if(PTempData == (EigthByte *) p) { //釋放內(nèi)存的用戶清空之前保存的用戶信息 PTemppUser = NULL。 while(NULL != pTemp) { //內(nèi)存被連城了一塊,從首地址就可以全部刪除 if(pTempisMemeBeginamp。 delete qTemp。 pTemp = pTempnext。 g_ptrMemPoolShowTheMemePoolStatue()。 ptrCharArray = (char *) g_ptrMemPoolGetMemeroy((void**)amp。 char c = ptrCharArray[800]
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1