它是在堆栈还是堆?
我有一些C代码,这是一个谜题。 出于这个代码的原因,我想知道如何判断struct
对象是在堆还是堆栈上?
没有使用malloc
或calloc
创建对象。 他们以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个不同位置。