在C中使用结构时的内存分配

时间:2019-02-01 10:07:14

标签: c struct

在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。

3 个答案:

答案 0 :(得分:2)

您的示例中的局部变量(例如MyStruct ms)分配在堆栈上。大多数编译器会在其prologue中为这些变量保留空间。也就是说,当构造堆栈框架(在这种情况下为main函数)时。

有关更多信息,这是有关堆栈内存的good article

答案 1 :(得分:0)

  

实例化对应对象时是否保留了内存   结构类型例如在主函数中声明一个变量MyStruct ms   以上情况。

是的,使用结构时将保留或分配内存。在您的示例中,您的MyStruct在堆栈上,因此,在调用函数时,相应的内存量将在堆栈上保留以容纳您的变量。

编译器使用该定义来计算使用的内存量,因此它知道要为堆或堆栈上的结构实例分配/保留多少内存,但实际上还没有分配任何内存。

答案 2 :(得分:0)

您正在此行分配内存:

MyStruct ms = {.a=100, .b=120};

在此之前,您仅定义结构。