gpt4 book ai didi

c - 它在栈上还是堆上?

转载 作者:太空狗 更新时间:2023-10-29 14:50:51 25 4
gpt4 key购买 nike

我有一些令人费解的 C 代码。出于处理此代码的原因,我想知道如何判断 struct 对象是否在堆或堆栈上结束?

对象不是是用malloccalloc 创建的。他们以数组的形式开始他们的生活。出于本文的目的,我将调用结构 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;
}

我不确定这是否与我的问题有关。我从不需要 free() 或清理内存...恐怕我对 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 个不同位置的地址。

关于c - 它在栈上还是堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com