它是在堆栈还是堆?

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

没有使用malloccalloc创建对象。 他们以arrays的forms开始他们的生活。 出于本文的目的,我将调用struct Emp。

 Emp myEmp[6]; /* Each myEmp[?] item is populated in code */ 

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

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

 int i; for( i = 0; i < n; i++ ) { emps_a[i] = myEmpsCopy + i; } 

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

非常感谢帮助。

保留使用static modifier声明的全局变量和变量(在一个单独的内存区域中分配),在函数体中声明的局部变量在堆栈上分配,而无论你调用malloc for是在堆上分配的。 此外,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 

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