Я хотел понять, как работает программа «С», и сохранить данные в машине.Итак, я посмотрел на Memory Layout C из здесь и следовал тем же инструкциям на моей машине, которая является 64-битной.
Сначала, когда я написал программу (main
имеет только return 0;
) и использовал команду size
для исполняемого файла: она показала большую разницу как в текстовом, так и в сегментах данных.
text data bss dec hex filename
10648 2400 2640 15688 3d48 33.exe
Но на упомянутом выше веб-сайте было показано:
text data bss dec hex filename
960 248 8 1216 4c0 memory-layout
Первый вопрос: Какие факторы (аппаратное / программное обеспечение) отвечают завыделение памяти?.А что означает dec
в макете?/ Вопрос заканчивается здесь
Но сначала я проигнорировал это и начал объявлять переменные (глобальные и статические), чтобы увидеть, где они хранятся.И я столкнулся с проблемой на этом этапе.
для этого кода:
#include <stdio.h>
int global;
int main(void) {
//static int x;
return 0;
}
Я получил вывод как:
text data bss dec hex filename
10648 2400 2656 15704 3d48 33.exe
Это потому, что я объявил (не инициализирован) глобальная переменная, и поэтому в bss
был добавлен 16 байтов (int-64bit) блока памяти, поэтому из 2640 (первый пример) стало 2656. Я понимаю это.
Q2: Но когда я добавляю static int x
, он больше не добавляет блок памяти к bss
.Ожидается ли это?
text data bss dec hex filename
10648 2400 2656 15704 3d48 33.exe
Q3 : И, наконец, когда я инициализирую глобальную переменную с 20
, data
увеличивается (ожидается), а dec
также увеличивается, почему?
text data bss dec hex filename
10648 2416 2656 15720 3d48 33.exe
Я знаю, что задавал много вопросов здесь, но я хотел точно знать, как это управление памятью работает в C.
Arigato:)