from c語言中文網
void
*malloc
(size_t size)
最常用贅述
void
*calloc
(size_t numelements, size_t sizeofoneelement)
申請的記憶體區域會先清零,記憶體大小 = numelements * sizeofoneelement
void
*realloc
(void
*ptr, size_t size)
為ptr重新分配記憶體空間,size為新的記憶體空間大小。
size可比原來的大或小,也可以一樣(很無聊才會這麼幹吧)。
如果size==0,原來的ptr被釋放,但是新空間又沒有,相當於free(ptr)。
如果ptr==null,相當於malloc(size)。
【注意】
返回的新位址可能仍為ptr也可能不是了(size比原來大且沒有後續沒有空間擴充套件的時候),所以呼叫此函式後不可以再用原來的ptr(已被**),改用返回值,當然如果返回null,也就是分配失敗,ptr還是可用的。
原來ptr裡的內容會在新的位址上被繼承,當位址變化後函式會把原來ptr裡的內容拷貝到新位址。
ptr只能是申請出來的指標,簡單理解就是必須為malloc/calloc/realloc函式的返回值。
from
void
*kmalloc
(size_t size, gfp_t flags)
申請一塊連續物理記憶體(為什麼說連續?與vmalloc相對應)。
size< 128kb
flags簡單的參考上方引用,更加詳細複雜的自行搜尋。
釋放記憶體用kfree()
void
*kzalloc
(size_t size, gfp_t flags)
比kmalloc多了記憶體塊清零的操作。
釋放記憶體用kfree()
void
*vmalloc
(size_t size)
與kmalloc區別在於不要求物理記憶體連續,但是虛擬記憶體都是連續的,所以沒有了kmalloc的size限制,申請大空間就用這個。
釋放記憶體用vfree()
顯而易見這個沒有flag,可以被阻塞,所以不能在中斷上下文使用
linux C語言 記憶體申請 堆 棧 大小限制
一直都有乙個疑問,乙個程序可以使用多大的記憶體空間,swap交換空間以及物理記憶體的大小,ulimit的stack size對程序的記憶體使用有怎樣的限制?今天特親自動手實驗了一次,總結如下 開闢一片記憶體空間有2種方式,第一種 int a 第二種malloc,那麼在linux下,這兩種方式可以開闢...
DPDK記憶體(二)記憶體申請操作
eal提供了乙個malloc api用於申請任意大小記憶體。這個api的目的是提供類似malloc的功能,以允許從hugepage中分配記憶體並方便應用程式移植。通常,這些型別的分配操作不應該在資料面處理中進行,因為他們比基於池的分配慢,並且在分配和釋放路徑中使用了鎖操作。但是,他們可以在配置 中使...
linux c 位元組對齊申請記憶體與位元組對齊陣列宣告
查詢當前系統cache line大小 cat sys devices system cpu cpu1 cache index0 coherency line size 函式 void memalign size t boundary,size t size 標頭檔案stdlib.h 函式memali...