gpt4 book ai didi

c - 在堆栈或堆上初始化结构?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:41 25 4
gpt4 key购买 nike

如果你在 C 中有这样一个结构:

struct mystruct{
int i;
char c;
};

而你这样做:

mystruct m;
m.i = 5;
m.c = 'i';

你是在堆上还是在栈上创建结构?

最佳答案

在堆栈中:

void func()
{
mystruct m;
...
}

// The address of 'm' is within the stack memory space

在堆中:

void func()
{
mystruct* m = malloc(sizeof(mystruct));
...
}

// The value of 'm' is an address within the heap memory space

在数据部分:

mystruct m;

static mystruct m;

void func()
{
static mystruct m;
...
}

// The address of 'm' is within the data-section memory space

在代码部分:

const mystruct m;

const static mystruct m;

void func()
{
const mystruct m;
...
}

void func()
{
const static mystruct m;
...
}

// The address of 'm' is within the code-section memory space

更新:

虽然与您的问题没有直接关系,但请注意上述 const 规则并不完全准确,因为该关键字实际上有两个目的:

  1. 在程序的(只读)代码段中分配一个变量。
  2. 防止您(程序员)编写错误代码,例如更改您最初打算在整个程序执行过程中保持不变的变量值。

但功能 #1 确实取决于所使用的编译器,它可能会将其放置在其他位置,具体取决于您的项目配置。例如,有时您可能只是为了功能 #2 而想声明一个常量变量,而功能 #1 由于代码段中的内存空间不足而不可行。

关于c - 在堆栈或堆上初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438308/

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