Различие размеров различных полей между объектным файлом и исполняемым файлом
Я получил следующую информацию, используя команду 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++).