Почему GCC ставит пробел перед адресом виртуальной памяти .init_data в общих объектахC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему GCC ставит пробел перед адресом виртуальной памяти .init_data в общих объектах

Сообщение Anonymous »

  • Очевидно, перед .init_array в общих объектах всегда есть пробел. Это просто соглашение? Я не могу найти никаких ссылок на него.
Если моя основная программа загружает слишком много SO, htop показывает заметное увеличение использования пространства виртуальной памяти. Это кажется вводящим в заблуждение, хотя я думаю, что это не имеет никаких реальных последствий, поскольку пробелы являются всего лишь виртуальными, и на них нельзя ссылаться и, следовательно, не выгружать их в физическую память?
  • Кроме того, столбец размера не соответствует фактическому дисковому пространству. Я предполагаю, что общий размер в столбце размера не учитывает заполнение между сегментами/разделами.
Минимальный пример для gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609 для следующей команды. То же самое и в других системах, которые я пробовал.
Содержимое в foo.c
#include

void foo(void)
{
puts("Hello, I am a shared library");
}

gcc -c -Wall -Werror -fpic -g3 foo.c
gcc -shared -o libfoo.so foo.o

При проверке файла SO я получаю следующий результат.
❯ size -A -d libfoo.so
libfoo.so :
section size addr
.note.gnu.build-id 36 456
.gnu.hash 60 496
.dynsym 336 560
.dynstr 172 896
.gnu.version 28 1068
.gnu.version_r 32 1096
.rela.dyn 192 1128
.rela.plt 24 1320
.init 26 1344
.plt 32 1376
.plt.got 16 1408
.text 275 1424
.fini 9 1700
.rodata 29 1709
.eh_frame_hdr 28 1740
.eh_frame 100 1768
.init_array 8 2100736
.fini_array 8 2100744
.jcr 8 2100752
.dynamic 448 2100760
.got 40 2101208
.got.plt 32 2101248
.data 8 2101280
.bss 8 2101288
.comment 53 0
.debug_aranges 48 0
.debug_info 145 0
.debug_abbrev 69 0
.debug_line 424 0
.debug_str 15511 0
.debug_macro 4020 0
Total 22225

❯ l -l libfoo.so
-rwxr-xr-x 1 root root 28936 Apr 17 18:48 libfoo.so*


Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-shared
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»