Почему размер моего двоичного файла зависит от размера моего массива?

Недавно я наткнулся на очень странный эффект раздувания кода, который я действительно не могу объяснить самому себе. Ниже приведен минимальный рабочий пример:Полученный двоичный файл (созданный с использованием GCC MinGW 4.9.2 x86_64 posix sjlj) имеет размер 15,28 МБ .Однако, если вы установите, например, ---- +: = 1 =: + ----, вы получите двоичный файл размером 17 КБ .Итак, почему размер двоичного файла зависит от размера массива здесь?По-видимому, эффект вызван тем, что структура является Singleton.Тем не менее, я до сих пор не вижу правдоподобных доводов, почему компилятор раздувает двоичный файл.Спасибо за вашу помощь!(Протестировано с оптимизацией и без нее и только с флагом ---- +: = 2 =: + ---- . Между прочим, это также происходит с массивами в стиле C ...)
4 голоса | спросил Rene R. 13 Maypm15 2015, 19:08:18

1 ответ


0
«По-видимому, эффект вызван структурой, являющейся Singleton. Тем не менее, я до сих пор не вижу никаких правдоподобных рассуждений, почему компилятор раздувает двоичный файл».Да, ваши наблюдения верны.Ваш одноэлементный экземпляр имеет статическую продолжительность хранения .Тот факт, что размер массива определяет размер вашего двоичного кода, объясняется тем, что вся инициализация вашего одноэлементного объекта выполняется во время компиляции и, вероятно, идет в раздел ---- +: = 0 =: + ----,Но это все зависит от используемой в настоящее время реализации компилятора и уровней оптимизации.
ответил πάντα ῥεῖ 13 Maypm15 2015, 19:14:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132