Различие размеров различных полей между объектным файлом и исполняемым файлом

Я получил следующую информацию, используя команду 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 ответ

Решение

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

Другие вопросы по тегам