gpt4 book ai didi

c - 文献中未解释的可变大小自动分配 (alloca) 的使用

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:36 26 4
gpt4 key购买 nike

我正在阅读嵌入式软件基础 - Where C and Assembly Meet (2001),看到了以下代码:

FILE *OpenFile(char *name, char *ext, char *mode)
{
int size = strlen(name) + strlen(ext) + 2;
char *filespec = (char *) alloca(size);
sprintf(filespec, "%s.%s", name, ext);
return fopen(filespec, mode);
}

作者没有阐明为什么 alloca 有用,或者它实现了什么。他声称​​“从堆中分配动态内存的最常见原因是对象的大小直到执行时才知道……”

但是,我不明白他为什么不能只在第 4 行写 char *filespec = (char *) size;

最佳答案

最近请不要在你的程序中使用 alloca :-)它与 (char *) 大小不同!它与 char filespec[size] 相同,但他会使用它,因为 VLA(可变长度数组)可能在他的编译器中不可用(它们出现在 C99 中,你应该使用它们)除了可能无法访问嵌入式应用程序中的堆之外。

关于c - 文献中未解释的可变大小自动分配 (alloca) 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com