如果您阅读GNU库文档,您可以看到:
一些非GNU系统无法支持alloca,因此它的可移植性较低.但是,用C编写的alloca仿真速度较慢,可以在有此缺陷的系统上使用。
假设VLAs也不可用,alloca()的C仿真会是什么样子?
发布于 2016-07-28 09:42:09
根据alloca()是什么
函数在调用方的堆栈帧中分配空间的大小字节。当调用alloca()的函数返回其调用者时,这个临时空间将自动释放。
实现将是特定于平台的,可能编译器应该知道这一点,因为生成的代码必须尊重堆栈帧中局部变量的非固定偏移量。因此,如果您的工具链没有VLA -您与它无关。
发布于 2016-07-28 10:07:10
既然你是在看GNU libc文档,你可能会考虑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的地址。
https://stackoverflow.com/questions/38632346
复制相似问题