在C中模拟`alloca()`

时间:2016-07-28 09:29:05

标签: c alloca

如果您阅读了GNU libs文档,您可以看到:

  

某些非GNU系统无法支持alloca,因此它的可移植性较差。   但是,用C语言编写的alloca模拟速度较慢   在有这种缺陷的系统上使用。

假设VGA不可用,alloca()的C仿真如何?

2 个答案:

答案 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的地址。