раздел неинициализированных данных nm - PullRequest
0 голосов
/ 14 июля 2009

Я пытаюсь узнать подробности работы компилятора, и мне было интересно, что означает символ B при использовании nm. Я пытался следовать std :: cout в libstdc ++, но это заканчивается

nm -DC /usr/lib/libstdc++.so.6 | grep cout
000e8da0 B std::cout
000e9020 B std::wcout

Где ссылка на фактическую функцию и что означает B?

Ответы [ 3 ]

3 голосов
/ 14 июля 2009

Это означает, что символ является глобальным и находится в разделе неинициализированных данных (исторически названный BSS, следовательно, 'B') Более подробная информация здесь:

http://linux.die.net/man/1/nm

Также возможно, если вы наберете "man 1 nm".

А как насчет функции? Ну, «cout» - это экземпляр объекта, а не функция. Его класс будет иметь функции, в основном это перегрузки операторов.

1 голос
/ 14 июля 2009

«Неинициализированные» данные, раздел BSS, фактически инициализируются загрузчиком ОС для всех нулей. Он не занимает места в изображении на диске, поскольку известно, что содержимое содержит все нули - в изображении хранится только его размер.

Глобальные переменные обычно размещаются в разделе BSS. Это также причина того, что глобальные переменные обычно инициализируются нулями.

1 голос
/ 14 июля 2009

со страницы руководства nm:

   B       The symbol is in the uninitialized data section (known as BSS).
...