如果您阅读了GNU libs文档,您可以看到:
某些非GNU系统无法支持alloca,因此它的可移植性较差。 但是,用C语言编写的alloca模拟速度较慢 在有这种缺陷的系统上使用。
假设VGA不可用,alloca()
的C仿真如何?
答案 0 :(得分:1)
根据alloca()
是什么
alloca()函数在堆栈中分配空间的大小字节 呼叫者的框架。此临时空间将自动释放 当调用alloca()的函数返回其调用者时。
实现将是特定于平台的,并且编译器可能应该知道它,因为生成的代码必须遵守堆栈帧处的本地非固定偏移量。因此,如果您的工具链没有VLA,则与此无关。
答案 1 :(得分:0)
由于您正在查看GNU libc documentation,您可能会考虑如何在GCC中模拟它。
GCC提供cleanup
属性,允许在变量超出范围时调用清理函数。
void foo (void *p) {
printf("foo: %p\n", p);
}
int main(void) {
int x __attribute__((cleanup(foo)));
x = 7;
printf("%p\n", &x);
return 0;
}
在上述计划中,当x
超出范围时,foo()
会传递x
的地址。