它是堆栈还是堆?

我有一些C代码是一个难题。 为了解决这个问题,我想知道如何判断一个struct对象是堆栈还是堆栈?

这些对象不是malloccalloc创建的。 他们以阵列的形式开始他们的生活。 为了这篇文章的目的,我打算调用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个不同位置。

链接地址: http://www.djcxy.com/p/79247.html

上一篇: Is it on the Stack or Heap?

下一篇: Are there machines, where sizeof(char) != 1, or at least CHAR