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

标签 c memory-management dynamic-memory-allocation

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

相关文章:

c - 在计算三角函数时,如何让 C 区分单 float 和双 float ?

c - 如何在C中定义枚举类型(enum)?

c - Libtool 为对象添加前缀,但 gcov 要求它们没有前缀

c - Do...While 逻辑运算符循环

c - 如何在C中使用malloc正确分配内存

javascript - Settimeout和setinterval内存使用情况

c++ - 将 std::vector 分配给堆上特定内存位置的正确语法?

c - 在先前 malloc ed 指针上使用 realloc 会导致段错误

c++ - 为什么在声明静态数组时不能指定可变大小?

c++ - 无法删除堆内存上的指针