В каком разделе памяти неинициализированная переменная integer 'A' занимает память? - PullRequest
0 голосов
/ 06 апреля 2019

В приведенном ниже коде при печати размера переменной написано 4 байта с использованием компилятора GCC в моей 64-битной системе Linux. Таким образом, память, кажется, выделена для этого необъявленного целого числа. В каком разделе памяти неинициализированная переменная integer 'A' занимает память? Будет ли это сегмент BSS, если он неинициализирован, или стек, как локальная переменная? Хотя он неинициализирован, он имеет значение по умолчанию ноль и размер 4 байта, поэтому я подумал, что он получит выделение памяти в стеке.

#include<iostream>
#include<iomanip>

using namespace std;

int main(void)
{ 
    int A;

    cout << A << endl << sizeof(A);

    return 0;
}

1 Ответ

0 голосов
/ 06 апреля 2019

Программы обычно имеют 4 раздела памяти, т.е.
1. Код: здесь хранятся исполняемые инструкции программы.
2. Данные: в них содержатся глобальные и статические переменные, которые инициализируются программистом.
3. Стек: Здесь все локальные переменные всех функций идут вместе со своими объявлениями, инициализацией и изменениями, если таковые имеются.Он работает на FILO или LIFO.
4. Куча: здесь происходит динамическое распределение памяти.В c вы можете использовать malloc для выделения памяти в куче указателю, а в c ++ вы можете использовать new .

В вашем случае, поскольку A является просто локальной переменной основной функции, следовательно, она должна храниться в стеке.

...