在C中使用结构时何时分配内存?在声明,定义或初始化时?
// Here is declaration
typedef struct MyStruct MyStruct;
// Here is definition
struct MyStruct {
int a;
int b;
};
int main(void) {
//This declares and initializes variable of type MyStruct
MyStruct ms = {.a=100, .b=120};
return 0;
}
当实例化对应构造类型的对象时,是否保留了内存?在上述情况下,请在主函数中声明一个变量MyStruct ms。
答案 0 :(得分:2)
您的示例中的局部变量(例如MyStruct ms
)分配在堆栈上。大多数编译器会在其prologue中为这些变量保留空间。也就是说,当构造堆栈框架(在这种情况下为main
函数)时。
有关更多信息,这是有关堆栈内存的good article。
答案 1 :(得分:0)
实例化对应对象时是否保留了内存 结构类型例如在主函数中声明一个变量MyStruct ms 以上情况。
是的,使用结构时将保留或分配内存。在您的示例中,您的MyStruct
在堆栈上,因此,在调用函数时,相应的内存量将在堆栈上保留以容纳您的变量。
编译器使用该定义来计算使用的内存量,因此它知道要为堆或堆栈上的结构实例分配/保留多少内存,但实际上还没有分配任何内存。
答案 2 :(得分:0)
您正在此行分配内存:
MyStruct ms = {.a=100, .b=120};
在此之前,您仅定义结构。