看到半動態申請內存,第一反應這是什麼鬼?
實際上半動態內存申請很容易理解,在GNU C中使用alloca函數來實現
#include <stdlib.h>
void *alloca (size_t size)
alloca函數可以像malloc一樣動態申請內存(注意所申請的內存位置在調用函數的棧裡面,頁因此在調用函數結束後自動釋放)
好處是顯而易見的:既可以自由得申請空間,又不需要手動釋放內存。
壞處是:發生錯誤時,無法得到一個清晰得錯誤消息。還有就是,非GNU系統不支持alloca,這是一個BSD擴展,兼容性不好。(其他平台可能會使用C寫一個模擬得alloca,但效率不好)
在GNU C中得大部分情況下,你可以使用可變大小的數組代替alloca。
區別:可變大小的數組只在數組名所在的區域有效,超過則釋放。alloca 申請的空間則一直保留的函數結束。
alloca可以在循環體中使用,每次循環都逐步增加內存空間。而可變大小的數組不行。