21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
|
|
1 | |
Размер исполняемого файла20.01.2017, 13:27. Просмотров 1306. Ответов 9
Метки нет Все метки)
(
0
|
|
20.01.2017, 13:27 | |
Размер исполняемого файла при статической и динамической линковке Сборка исполняемого файла
|
|
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
|
|
20.01.2017, 14:00 | 2 |
То есть не меняется? С точностью до байта?
Смотря какие изменения. Если изменилось только имя переменной, то ничего удивительного в этом нет.
0
|
Ушел с форума
![]() |
|
20.01.2017, 14:00 | 3 |
![]() Решение
Потому что исполняемый файл состоит из секций, а секции выравниваются на
определенное значение, обычно 512 байт. Неиспользуемое пространство заполняется нулями. Как только размер очередной секции превышается - файл снова увеличивается на 512 байт.
5
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|
20.01.2017, 14:54 | 4 |
Если "не меняется" значит меняется, но на очень малое количество, то вся суть в том, что размер исполняемого файла формируется из двух вещей. Первая это размер необходимого минимума с набором инструкций для запуска программы. Эта часть слабо меняется в размере и при небольших программах занимает основную часть. Вторая это все ваши функции, переменные. И при небольших программах вы не заметите сильных изменений её размера. Что в процентном соотношении от общего размера, конечно, кажется почти нулевым.
0
|
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
|
|||||||||||
21.01.2017, 14:06 [ТС] | 5 | ||||||||||
да
Убежденный,
(debug)добавляя два массива по килобайту(что в итоге 2кб), размер не изменяется. (в .asm файле сборки все четко) Добавлено через 15 минут уточню: массивы инициализированы
0
|
Ушел с форума
![]() |
|
22.01.2017, 09:48 | 7 |
А почему он обязательно должен меняться?
Компилятор/компоновщик ведь не обязан реализовывать массив как некие статические данные, "зашитые" в exe. Если массив выделен на стеке, то он реализуется, скорее всего, как 'sub r(e)sp, array_size'. Это во-первых. Во-вторых, если массив нигде не используется, он в результате оптимизации может быть вообще выброшен за борт. Хотя к debug это обычно не относится.
0
|
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
|
|
22.01.2017, 12:28 [ТС] | 8 |
Убежденный, хоть и debug, но я все это перечислял на всякий.
и он еще как-то сохраняет этот размер: скомпилировав без доп. переменных выдает один размер, добавив на килобайт с лишним меняет его примерно на столько; но убрав эти переменные, размер остается тот же. Под них может специально место резервируется, не может же это быть случайным? Так как пересобрав выдает все правильно ![]()
0
|
Ушел с форума
![]() |
|
22.01.2017, 15:23 | 9 |
А что мешает посмотреть сгенерированный компилятором машинный код и проверить?
1
|
Тематические курсы и обучение профессиям онлайн Профессия Разработчик на C++ (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
|
|
22.01.2017, 21:05 [ТС] | 10 |
Убежденный, посмотрел: да, если убрать переменные, то место под переменные заполняется нулями, а если пересобрать, то оно уже начинает использоваться
0
|
22.01.2017, 21:05 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Подключения заголовочного и исполняемого файла
Как добавить версию исполняемого файла? Выводит путь до исполняемого файла в консоль Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |