我讀了很多地方alloca
已過時,不應使用和應使用可變長度數組。alloca是完全可替換的嗎?
我的問題是:alloca
完全可以通過可變長度數組來替換嗎?
在我的特殊情況下我有一些看起來像這樣:
typedef struct {
int *value;
size_t size;
} some_type;
void SomeExternalFunction(some_type);
...
void foo(){
//What I thought to do
some_type bar;
bar.value=alloca(sizeof(int)*10);
SomeExternalFunction(bar);
//what should be done without alloca
some_type fizz;
int tmp[10];
fizz.value=tmp;
SoemExternalFunction(fizz);
}
我缺少的東西,或這是一個實際的用好ALLOCA的?在這個例子中,假設我想要將值分配到堆棧上
這實際上不是一個可變長度的數組......正如你指定了一個常量長度。而且......即使它*長度可變,我並沒有真正看到alloca在這裏購買了什麼,除了讓代碼的意圖稍微模糊。 (很顯然,如果你使用的編譯器不支持可變長度數組,你無需在兩者之間進行選擇) – Shog9 2010-08-15 19:17:59
另請參閱:http://stackoverflow.com/questions/3452434/in-which- cases-is-alloca-useful(將根據標題重複,但我覺得你確實想要問別的東西......雖然不知道是什麼) – Shog9 2010-08-15 19:22:26