C 封裝私有堆(Private Heap)

2021-09-06 04:57:27 字數 2269 閱讀 6876

private heap 是 windows 提供的一種記憶體記憶體機制,對於那些需要頻繁分配和釋放動態記憶體的應用程式來說,private heap 是提高應用程式效能的一**寶,使用它能降低 new / malloc 的呼叫排隊競爭以及記憶體空洞。private heap 的原理及應用的資料很多,這裡就不一一介紹了,常用的 private heap api 有以下幾個,具體介紹請參考幫助文件:

heapcreate();

heapdestroy();

heapalloc();

heaprealloc();

heapsize();

heapfree();

heapcompact();

由於是 c 風格的 api,使用起來比較繁瑣,因此本座在閒暇之餘用 c++ 對這些 api 進行了封裝,主要包括兩個類:

#pragma once

class cprivateheap

;enum enallocoptions

;enum enreallocoptions

;enum ensizeoptions

;enum enfreeoptions

;enum encompactoptions

;public:

pvoid alloc(dword size, enallocoptions options = ao_default)

pvoid realloc(pvoid pvmem, dword size, enreallocoptions options = rao_default)

dword size(pvoid pvmem, ensizeoptions options = so_default)

bool free(pvoid pvmem, enfreeoptions options = fo_default)

dword comapct(encompactoptions options = cpo_default)

bool isvalid()

public:

cprivateheap(encreateoptions options = co_default, dword initsize = 0, dword maxsize = 0)

~cprivateheap()

private:

cprivateheap(const cprivateheap&);

cprivateheap operator = (const cprivateheap&);

private:

handle m_heap;

};template

class cprivateheapbuffer

~cprivateheapbuffer()

t* realloc(dword size, cprivateheap::enreallocoptions options = cprivateheap::rao_default)

dword size(cprivateheap::ensizeoptions options = cprivateheap::so_default)

operator t* () const

private:

cprivateheapbuffer(const cprivateheapbuffer&);

cprivateheapbuffer operator = (const cprivateheapbuffer&);

private:

cprivateheap& m_hpprivate;

t* m_pvmemory;

cprivateheap::enfreeoptions m_opfree;

};typedef cprivateheapbuffercprivateheapbytebuffer;

typedef cprivateheapbuffercprivateheapstrbuffer;

上述**看起來挺複雜,但使用起來卻是異常簡單的,請看下面的使用示例:

//

全域性可見的 heap

cprivateheap g_heap;

class myclass

static

void test_sm_eap()

};void test_g_heap()

int _tmain(int argc, _tchar* argv)

codeproject

私有屬性與封裝

用 建構函式來建立物件 function dog var huzi new dog huzi.bark 汪汪 alert huzi.leg 4 上面並沒有完成物件導向的 封裝 所謂封裝 就要封閉一部分,外界無法訪問 開放一部分,通過開放部分間接訪問私有部分 下面使用 閉包來完成js物件導向之私有屬性...

iOS 私有庫封裝

二 建立本地spec庫 所謂spec repo,就是pods的索引。一旦在podfile中設定source為某個私有repo的git位址,在進行pod update的時候就會去這個repo中進行檢索,如果檢索到對應的pod,會讀取該pod的podspec從而進行安裝 建立本地spec庫 pod re...

C 封裝(成員屬性私有化)

c 封裝 成員屬性私有化 include include using namespace std 成員屬性設定為私有 1 可以自己控制讀寫許可權 2 對於寫可以檢測資料的有效性 class person 獲取姓名 string getname 獲取年齡 可讀可寫 如果想修改,年齡的範圍必須是0 15...