在gnu系統中,malloc或realloc返回的記憶體塊位址都是8的倍數(如果是64位系統,則為16的倍數)。如果你需要更大的粒度,請使用memalign或valloc。這些函式在標頭檔案「stdlib.h」中宣告。
在gnu庫中,可以使用函式free釋放memalign和valloc返回的記憶體塊。但無法在bsd系統中使用,而且bsd系統中並未提供釋放這樣的記憶體塊的途徑。
函式:void * memalign (size_t boundary, size_t size)
void* pret = memalign(0x10000,size); // use pret's first 16bit to make the pool's direction, so the
函式memalign將分配乙個由size指定大小,位址是boundary的倍數的記憶體塊。引數boundary必須是2的冪!函式memalign可以分配較大的記憶體塊,並且可以為返回的位址指定粒度。
函式:void * valloc (size_t size)
使用函式valloc與使用函式memalign類似,函式valloc的內部實現裡,使用頁的大小作為對齊長度,使用memalign來分配記憶體。它的實現如下所示:
void * valloc (size_t size)
動態記憶體分配
在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...
動態記憶體分配
為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...
動態記憶體分配
c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...