Распределение памяти при использовании структур в C - PullRequest
0 голосов
/ 01 февраля 2019

Когда выделяется память при использовании структур в 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;
}

Зарезервирована ли память, когда мы создаем экземпляр объекта соответствующего типа stuct, например, объявляя переменную MyStruct ms в основной функции в указанном выше случае.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вы выделяете память в этой строке:

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

Раньше вы только определяли структуру.

0 голосов
/ 01 февраля 2019

Локальные переменные, такие как MyStruct ms в вашем примере, расположены в стеке.Большинство компиляторов резервируют место для этих переменных в их прологе .т.е. когда составляется кадр стека (для функции main в данном случае).

Более подробно, вот хорошая статья о стековой памяти.

0 голосов
/ 01 февраля 2019

Зарезервирована ли память, когда мы создаем объект соответствующего типа структуры, например, объявляя переменную MyStruct ms в основной функции в вышеприведенном случае.

Это верно, память резервируется или выделяется, когдаструктура используется.В вашем примере ваш MyStruct находится в стеке, поэтому при вызове функции в стеке резервируется соответствующий объем памяти для хранения вашей переменной.

Компилятор использует определение для вычисления суммыиспользуемой памяти, поэтому он знает, сколько памяти выделить / зарезервировать для ваших экземпляров структуры в куче или стеке, но на самом деле он еще не выделяет память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...