У меня есть процесс только с main () и таблица поиска, которая в основном пуста:
int arr[10] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 0};
Когда я помещаю этот массив в глобальную область за пределами main () и компилирую с gcc -O2 file.c
,Я получаю следующий исполняемый файл:
bash# size a.out
text data bss dec hex filename
1135 616 8 1759 6df a.out
Когда я помещаю этот массив в функцию main () и компилирую с gcc -O2 file.c
, я получаю следующий исполняемый файл:
bash# size a.out
text data bss dec hex filename
1135 560 8 1703 6a7 a.out
Затем яизмените размер массива на 10000 без изменения содержимого и повторите тест.На этот раз результаты:
За пределами main ():
bash# size a.out
text data bss dec hex filename
1135 40576 8 41719 a2f7 a.out
Внутри main ():
bash# size a.out
text data bss dec hex filename
1135 560 8 1703 6a7 a.out
Почему оптимизация не работает, когда массивв глобальном пространстве.Есть ли способ сохранить большую в основном пустую справочную таблицу в глобальной области и при этом оптимизировать ее?