回覆列表
-
1 # 使用者8680032716253
-
2 # pzyyo24296
一樣大。name是char指標型別,它只記錄地址,不記錄地址裡面存的東西所以不管存多少東西,地址的長度是不會變的。這個sizeof struct mm的長度目測是8(在32位程式裡)
一樣大。name是char指標型別,它只記錄地址,不記錄地址裡面存的東西所以不管存多少東西,地址的長度是不會變的。這個sizeof struct mm的長度目測是8(在32位程式裡)
下面的示例使用了Emery小組的庫--HeapLayers,為了定義可配置的分配算符,其中使用了mixins(在C++社群中,也被稱為Coplien遞迴模式):透過引數化的基來定義類,每一層中只定義兩個成員函式,malloc和free:template <class T>struct Allocator : public T { void * malloc(size_t sz); void free(void* p); //系統相關的值 enum { Alignment = sizeof(double) }; //可選介面e size_t getSize(const void* p);}; 在每一層的實現中,都有可能向它的基類請求記憶體,一般來說,一個不依賴於外界的記憶體分配算符,都會處在層次的頂層--直接向前請求系統的new和delete運算子、malloc和free函式。在HeapLayers的術語中,沒有頂層堆,以下是示例:struct MallocHeap { void * malloc(size_t sz) { return std::malloc(sz); } void free(void* p) { return std::free(p); }}; 為獲取記憶體,頂層堆也能透過系統呼叫來實現,如Unix的sbrk或mmap。getSize函式的情況就比較特殊,不是每個人都需要它,定義它只是一個可選項。但如果定義了它,你所需做的只是插入一個儲存記憶體塊大小的層,並提供getSize函式