它是堆栈还是堆?
我有一些C代码是一个难题。 为了解决这个问题,我想知道如何判断一个struct
对象是堆栈还是堆栈?
这些对象不是用malloc
或calloc
创建的。 他们以阵列的形式开始他们的生活。 为了这篇文章的目的,我打算调用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
修饰符声明的全局变量和变量(分配在单独的内存区域中),函数体中声明的局部变量会分配到堆栈中,而您调用malloc
任何内容都会分配到堆中。 另外,用_alloca
分配的C99可变大小的数组和内存将最终堆栈。
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个不同位置。
上一篇: Is it on the Stack or Heap?
下一篇: Are there machines, where sizeof(char) != 1, or at least CHAR