如果您在C中有这样的结构:
struct mystruct{
int i;
char c;
};
你做了:
mystruct m;
m.i = 5;
m.c = 'i';
您是在堆上还是在堆栈上创建结构?
答案 0 :(得分:4)
在筹码中:
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由于代码段中的内存空间不足而不可行。
答案 1 :(得分:2)
堆栈。您必须使用malloc / calloc来创建堆变量。