使用C中的堆栈(而不是堆)动态分配内存

时间:2015-07-23 10:25:36

标签: c dynamic-memory-allocation stack-memory

如何使用堆栈(而不是堆)动态分配内存?

他们是否需要与malloc()calloc()不同的功能?使用哪个头文件?

2 个答案:

答案 0 :(得分:3)

alloca(3)是您正在寻找的功能。

void test_alloca(int num)
{
    int *myarray = alloca(num * sizeof(int));

    // do not try to free(myarray) !
}

在C99中,您还可以声明variable-length array

void test_vla(int num)
{
    int myarray[num];
}

这两个代码段在功能上是相同的。 (例外情况是第一个声明指针而第二个声明一个数组,如果你取sizeof(myarray)会导致不同的结果。)

答案 1 :(得分:1)

你问题中的句子

  

使用堆栈

动态分配内存

有点宽泛。但是,在我看来,你有两个选择,

  1. <alloca.h>
  2. 中使用alloca()原型
  3. 使用VLA C99及以上
  4. 但要记住根本区别,通过上述过程分配内存的生命周期将受其范围的限制。