首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中模拟``alloca()‘

在C中模拟``alloca()‘
EN

Stack Overflow用户
提问于 2016-07-28 09:29:04
回答 2查看 512关注 0票数 2

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

一些非GNU系统无法支持alloca,因此它的可移植性较低.但是,用C编写的alloca仿真速度较慢,可以在有此缺陷的系统上使用。

假设VLAs也不可用,alloca()的C仿真会是什么样子?

EN

回答 2

Stack Overflow用户

发布于 2016-07-28 09:42:09

根据alloca()是什么

函数在调用方的堆栈帧中分配空间的大小字节。当调用alloca()的函数返回其调用者时,这个临时空间将自动释放。

实现将是特定于平台的,可能编译器应该知道这一点,因为生成的代码必须尊重堆栈帧中局部变量的非固定偏移量。因此,如果您的工具链没有VLA -您与它无关。

票数 1
EN

Stack Overflow用户

发布于 2016-07-28 10:07:10

既然你是在看GNU libc文档,你可能会考虑GCC会如何效仿这一点。

GCC提供了cleanup属性,允许在变量超出作用域时调用清理函数。

代码语言:javascript
复制
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的地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38632346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档