【发布时间】:2011-03-30 03:56:35
【问题描述】:
我读过很多地方,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 在这里给你买了什么,除了让代码的意图稍微更加模糊之外。 (显然,如果您使用的编译器不支持可变长度数组,则无论如何您都无法在两者之间进行选择)
-
另请参阅:stackoverflow.com/questions/3452434/…(根据标题可能是重复的,但我觉得你真的想问别的……但我不知道是什么)