Различие размеров различных полей между объектным файлом и исполняемым файлом - PullRequest
0 голосов
/ 29 февраля 2012

Я получил следующую информацию, используя команду size в linux для примера программы на c ++.

text    data     bss     dec     hex   filename
1908     304     152    2364     93c   test
 346       4       1     351     15f   test.o

Я прочитал, что выходные данные являются размерами; текст - это реальный код, bss содержит неинициализированные глобальные переменные и данные как дополнение как инициализированных, так и неинициализированных сегментов. У меня вопрос, почему размеры в объектном файле и исполняемом файле, особенно в тексте, различаются, поскольку исходный код является общим в памяти? и если нет глобальных переменных, почему для bss указан размер?

Файл примера кода содержит:

#include <iostream>

using namespace std;

   int main()
   {
      cout << "Hello World!" << endl ;

      return 0;
   }

Спасибо!

1 Ответ

1 голос
/ 29 февраля 2012

Размеры разные, потому что ваш объектный файл содержит только ваш код.Связанный файл также включает в себя среду компилятора C ++ (т. Е. Код, необходимый для вызова main) и ссылки на различные стандартные библиотеки (по крайней мере, стандартные библиотеки C и C ++).

...