歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux C 內存管理方式之半動態

看到半動態申請內存,第一反應這是什麼鬼?

實際上半動態內存申請很容易理解,在GNU C中使用alloca函數來實現

#include <stdlib.h>

void *alloca (size_t size)

alloca函數可以像malloc一樣動態申請內存(注意所申請的內存位置在調用函數的棧裡面,頁因此在調用函數結束後自動釋放)

好處是顯而易見的:既可以自由得申請空間,又不需要手動釋放內存。

壞處是:發生錯誤時,無法得到一個清晰得錯誤消息。還有就是,非GNU系統不支持alloca,這是一個BSD擴展,兼容性不好。(其他平台可能會使用C寫一個模擬得alloca,但效率不好)

在GNU C中得大部分情況下,你可以使用可變大小的數組代替alloca。

區別:可變大小的數組只在數組名所在的區域有效,超過則釋放。alloca 申請的空間則一直保留的函數結束。

alloca可以在循環體中使用,每次循環都逐步增加內存空間。而可變大小的數組不行。

Copyright © Linux教程網 All Rights Reserved