它是在堆栈还是堆?

Fra*_*k V 5 c heap stack

我有一些C代码,这是一个谜题.出于这个代码的原因,我想知道如何判断一个struct对象是在堆还是堆栈上?

没有使用malloc或创建对象calloc.他们以阵列的形式开始他们的生活.出于本文的目的,我将调用struct Emp.

Emp myEmp[6];

/* Each myEmp[?] item is populated in code */
Run Code Online (Sandbox Code Playgroud)

对象以各种方式进行排序和操作,在某些时候,对象被复制,然后传递给数组指针.副本通过memcpy.完成.然后将对象放入以下内容:Emp* emps_a[6].

对象来自副本并分配到上面的emps_a中.

int i;
for( i = 0; i < n; i++ )
{
    emps_a[i] = myEmpsCopy + i;
}
Run Code Online (Sandbox Code Playgroud)

我不确定是否有一些或任何一个与我的问题有关.我从不需要免费()或记忆清理......我担心我对C不太了解.

非常感谢帮助.

Meh*_*ari 17

保留使用static修饰符声明的全局变量和变量(在单独的内存区域中分配),在函数体中声明的局部变量在堆栈上分配,而您调用的任何内容都malloc在堆上分配.此外,C99可变大小的数组和分配的内存_alloca将最终在堆栈上.

int* x[10];   // The addresses are held on the stack
int i;        // On the stack
for(i = 0; i < 10; ++i)
   x[i] = malloc(sizeof(int)*10);  // Allocates memory on the heap
Run Code Online (Sandbox Code Playgroud)

例如,在上面的代码中,int*堆栈上有一个值数组,用于将地址保存到堆中的10个不同位置.

  • C很明确.如果你没有malloc()它,它不在堆上. (4认同)