我正在阅读嵌入式软件基础 - 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/