我有一些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个不同位置.