C 自定義記憶體 管理

2021-06-19 01:09:02 字數 1028 閱讀 3323

工作中常常需要,將一些資料放到記憶體中處理,有時候資料量好大多達3g的空間。

而且自己儲存都是一些指標之類的東西,每次都要new,容器中儲存的量好大,四五百萬個。

而且最頭疼的就是 析構的時候要等好久才能釋放掉這個東西。查了好久 發現最流行的就是 空間換時間。

說了也慚愧,在學校中沒怎麼學到高深的東西,好多都是自己在工作中學習的。

**如下:

class jheapmanagement

~jheapmanagement()

char* buffer = heaps[currentheap];

char* retpos = buffer + currentallocsize;

currentallocsize += allocsize;

return (void*)retpos;

} templatevoid* alloc(size_t num = 1)

char* buffer = heaps[currentheap];

char* retpos = buffer + currentallocsize;

currentallocsize += allocsize;

return (void*)retpos;

} private:

void _addbuffer()

private:

vectorheaps;

size_t currentheap;

size_t currentallocsize;

};

#define heapbuffersize 33554432 //32m 

我定義的 每個塊的大小是32m,夥伴們也可以隨意設定。

用法:

jheapmanagement heap;

vectorcon;

for(int i=0;i<1000000;i++)

如果平時需要在記憶體中存放大量資料,自己寫個記憶體管理還是有點用的。如果**有什麼不對的地方希望大家指點。

delphi 自定義記憶體管理

1.主要通過getmemorymanager來hook原來的記憶體管理。2.通過setmemorymanager來設定你自己的新的記憶體管理,可以用乙個記憶體池來優化和管理程式的記憶體呼叫情況。procedure registermemmgr varamgr tmemorymanagerex beg...

自定義記憶體管理(二)

new關鍵字建立出來的物件位於什麼地方?你會直接回答在堆空間內嗎,有沒有想過會在其他地方,比如在靜態儲存區。讓我來分析一下你就明白了。首先我們要明確的是 new delete 的本質其實是 c 預定義的操作符 c 對這兩個操作符做了嚴格的定義行為 new 獲取足夠大的記憶體空間 預設為堆空間 在獲取...

C 69 自定義記憶體管理

問題 new關鍵字建立出來的物件位於什麼地方?這個兩個是操作符,意味著可以進行操作符過載。也可以改變記憶體分配方式!操作符過載注意 1.不推薦全域性過載 2.建議針對具體的類進行區域性過載 3.針對類的成員函式,過載new,delete這樣的函式預設是靜態成員函式 靜態儲存區中建立動態物件 clas...