Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
1

Размер исполняемого файла

20.01.2017, 13:27. Просмотров 1306. Ответов 9
Метки нет (Все метки)


почему при не особо больших изменениях размер ИФ не увеличивается и не уменьшается?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2017, 13:27
Ответы с готовыми решениями:

Размер исполняемого файла при статической и динамической линковке
В общем, компилирую простой пример: int main() { } Компилирую со статической и динамической...

Сборка исполняемого файла
Всем привет! Подскажите, пожалуйста, как собрать исполняемый файл с включенными в него сторонними...

Чтение исполняемого PE файла
Здравствуйте программисты. Недавно увлекся исследованием PE файлов и решил написать небольшую...

Запуск исполняемого файла
Как запустить исполняемый exe файл с параметрами в командной строке чтобы исполняемый файл...

9
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
20.01.2017, 14:00 2
Цитата Сообщение от prokl9tiy Посмотреть сообщение
не увеличивается и не уменьшается?
То есть не меняется? С точностью до байта?
Цитата Сообщение от prokl9tiy Посмотреть сообщение
при не особо больших изменениях
Смотря какие изменения. Если изменилось только имя переменной, то ничего удивительного в этом нет.
0
Ушел с форума
Эксперт С++
16419 / 7394 / 1185
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
20.01.2017, 14:00 3
Лучший ответ Сообщение было отмечено prokl9tiy как решение

Решение

Потому что исполняемый файл состоит из секций, а секции выравниваются на
определенное значение, обычно 512 байт. Неиспользуемое пространство
заполняется нулями. Как только размер очередной секции превышается -
файл снова увеличивается на 512 байт.
5
Форумчанин
Эксперт CЭксперт С++
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
Цитата Сообщение от likehood Посмотреть сообщение
С точностью до байта?
да
Цитата Сообщение от MrGluck Посмотреть сообщение
соотношении от общего размера
Убежденный,
(debug)добавляя два массива по килобайту(что в итоге 2кб), размер не изменяется. (в .asm файле сборки все четко)

Добавлено через 15 минут
уточню: массивы инициализированы
C++
1
int64 a[]{1,23,45,464,...
Assembler
1
2
3
4
5
6
;файл сборки
?a@@3PA_JA DQ   0000000000000001H           ; a
    DQ  0000000000000017H
    DQ  000000000000002dH
    DQ  00000000000001d0H
....
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
21.01.2017, 19:48 6
Цитата Сообщение от prokl9tiy Посмотреть сообщение
добавляя два массива по килобайту(что в итоге 2кб), размер не изменяется
либо куда-то не туда смотришь, либо значение выравнивания больше, чем 512 байт, описанные в посте #3
0
Ушел с форума
Эксперт С++
16419 / 7394 / 1185
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
22.01.2017, 09:48 7
Цитата Сообщение от prokl9tiy Посмотреть сообщение
добавляя два массива по килобайту(что в итоге 2кб), размер не изменяется.
А почему он обязательно должен меняться?
Компилятор/компоновщик ведь не обязан реализовывать массив как некие статические
данные, "зашитые" в exe. Если массив выделен на стеке, то он реализуется, скорее всего,
как 'sub r(e)sp, array_size'. Это во-первых. Во-вторых, если массив нигде не используется,
он в результате оптимизации может быть вообще выброшен за борт. Хотя к debug это
обычно не относится.
0
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
22.01.2017, 12:28  [ТС] 8
Убежденный, хоть и debug, но я все это перечислял на всякий.
и он еще как-то сохраняет этот размер: скомпилировав без доп. переменных выдает один размер, добавив на килобайт с лишним меняет его примерно на столько; но убрав эти переменные, размер остается тот же. Под них может специально место резервируется, не может же это быть случайным? Так как пересобрав выдает все правильно
0
Ушел с форума
Эксперт С++
16419 / 7394 / 1185
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
22.01.2017, 15:23 9
Цитата Сообщение от prokl9tiy Посмотреть сообщение
Под них может специально место резервируется, не может же это быть случайным? Так как пересобрав выдает все правильно
А что мешает посмотреть сгенерированный компилятором машинный код и проверить?
1
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
22.01.2017, 21:05  [ТС] 10
Убежденный, посмотрел: да, если убрать переменные, то место под переменные заполняется нулями, а если пересобрать, то оно уже начинает использоваться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2017, 21:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Подключения заголовочного и исполняемого файла
Есть 3 файла: Main.cpp: #include <iostream> using namespace std; #include "example.h" ...

Исходный код исполняемого файла C++...
Искал в инете декомпилятор, нашёл OLLYDBG, но ничего, похожего на исходный код он мне не выдал......

Как добавить версию исполняемого файла?
В большенстве файлов *.exe в свойствах имеется вкладка "Версия" в которой Имена элементов "Версия...

Выводит путь до исполняемого файла в консоль
#include "pch.h" #include <iostream> using namespace std; int main() { cout << "Hello...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.