我们知道结构的内存是在定义变量时(或创建实例时)分配的。
现在
struct Programmer {
int skills;
int problemSolved;
};
int main(){
Programmer me;//Here the memory will be allocated but in what
//format(discrete or continuous block of memory)?
me.skills = 10;
me.problemSolved = 2000;
return 0;
}
分配给结构实例或变量的内存是连续块(如在数组中)还是在离散的内存块中?如果是,那么为什么?
答案 0 :(得分:2)
结构在堆栈中分配,在一个连续的内存块中(在这种情况下可能是64位)。它是在调用函数时分配的(除非你的编译器做了一些棘手的事情)。
所有实例变量都在堆栈上分配(尽管未指定它们如何在标准中分配,这就是所有编译器的工作方式)。原因是,当您以递归方式调用函数时,它将为更多变量获取新的堆栈帧。这样,如果你有一个变量" me"在堆栈上,你从main()中调用main(),最后得到第二个" me"第二个堆栈框架中的变量。当第二个" main()"返回后,堆栈帧将被释放以供将来调用。
答案 1 :(得分:2)
为struct
分配的内存是连续的。来自C11标准草案的§6.2.5 ¶20:
结构类型描述了顺序分配的非空集 成员对象....
但是,根据§6.7.2.1 ¶15,为struct
分配的存储空间可能存在填充:
结构对象中可能有未命名的填充,但不在其中 开始。
而且,来自6.7.2.1 ¶17:
结构或联合的末尾可能有未命名的填充。