Почему меня беспокоит размер программы

В комментариях к одной из заметок, где я показывал программу на Гугл Гоу меня спросили почему мне так важен размер программы, я там как раз сетовал, что размер скомпилированной программы получился около четырёх мегабайт.

С одной стороны, конечно, средства хранения сейчас дёшевы и для современных дисков это не объём. С другой стороны, с оперативной памятью всё несколько похуже. Мы пока разделяем два пространства: пространство выполнения программ и пространство их хранения. Хотя идут эксперименты по их совмещению, в продаже пока ничего подобного нет.

Поэтому данность: количество оперативной памяти ограничено, в случае моего ноута — сильно ограничено, у меня их всего 2ГиБ, это мало по нынешним временам, но что делать. Типичные современные объёмы оперативной памяти не отличаются от этой цифры на порядки, обычно это 4—8 ГиБ. Моя память (17.74КиБ) Соответственно, меня расстраивают большие программы просто по той причине, что они занимают много памяти, которой и так немного. Если у вас открыт браузер, Фотошоп, Офис и ещё что-то, велика вероятность, что свободной памяти в системе почти нет и запуск ещё одной программы вызовет сброс на диск какого-то региона памяти и высвобождение его для новой программы.

Соответственно, чем больше некомпактных утилит (например, на «Гоу») будет работать, тем меньше у меня памяти, тем медленнее система, что меня расстраивает, конечно.
17 апреля 2013 15:07

SunChaser (sunchaser.info)
17 апреля 2013, 16:18

Размер скомпилированной программы это далеко не всё. Например, я переписал считалку тарифов для питерского метро с C++ на Rust. Скомпилированные проги различаются в 2 раза — 22 кб против 51, а вот потребление памяти выросло в 10 раз

Евгений Степанищев (bolknote.ru)
17 апреля 2013, 16:25, ответ предназначен SunChaser (sunchaser.info):

Согласен, так тоже бывает, но это размер скомпилированной программы я сразу вижу и он меня сразу расстраивает :)

zg (zg.livejournal.com)
17 апреля 2013, 16:43, ответ предназначен Евгений Степанищев (bolknote.ru):

сжатие upx приводит к дополнительному потреблению ram. особенно, если запускается более одной копии программы одновременно.

Евгений Степанищев (bolknote.ru)
17 апреля 2013, 16:47, ответ предназначен zg (zg.livejournal.com):

UCL-декомпрессор достаточно прост, чтобы быть реализованным в нескольких сотнях байт, и при работе не требует выделения дополнительной памяти.
http://ru.wikipedia.org/wiki/UPX

Правда, версия UPX 3 и выше использует LZMA, по-умолчанию.

zg (zg.livejournal.com)
17 апреля 2013, 17:41, ответ предназначен Евгений Степанищев (bolknote.ru):

для распакованного кода для каждой копии программы будет отдельная копия. для нормального — одна на всех. распакованный код вытесняется в своп.
ну и оверхеда в 100 байт не бывает. минимум 4кб. на практике возможно и больше.

rodem (инкогнито)
17 апреля 2013, 19:02

Ну тут два варианта:
 - поменять ноутбук
 - применить другой инструмент, вместо golang
Придётся искать компромисс, как ни крути.
Fun fact: Google statically links all their C/C++ code they run on their servers.
It seems you are severely confused regarding the characteristics of dynamic vs. static linking. Static linking is faster and more efficient.
If you have many processes static linking also means fork() is much faster.
http://www.reddit.com/r/golang/comments/tqudb/are_go_binaries_really_entirely_statically_linked/c4p1awi

Евгений Степанищев (bolknote.ru)
17 апреля 2013, 20:25, ответ предназначен rodem

Я уже писал, что он не весь статически линкуется:
otool -L corner
corner:
/usr/local/lib/libgd.2.0.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 0.0.0, current version 0.0.0)
If you have many processes static linking also means fork() is much faster.
Интересно, откуда в Гоу форк и для чего он там?

Евгений Степанищев (bolknote.ru)
18 апреля 2013, 07:54, ответ предназначен rodem

Ну тут два варианта:
- поменять ноутбук
Как не меняй, беда в том, что оперативной памяти на порядок не увеличится. Обычные цифры — 4—8. А аппетиты Гоу растут. Версия 0.60 компилировала одну мою программу в файл размером 1,6 мегабайта, версия один компилирует уже в файл размером 2,2МиБ.

rodem (инкогнито)
18 апреля 2013, 08:54

Обычные цифры — 4—8
но с другой стороны, сейчас 2Гб, из них система съедает условно 1Гб. Будет 8, система всё равно будет кушать 1, а 7 тебе. Вполне себе порядок.
А аппетиты Гоу растут. Версия 0.60 компилировала одну мою программу в файл размером 1,6 мегабайта, версия один компилирует уже в файл размером 2,2МиБ.
ну линейная экстраполяция тут явно лишняя "через 10 лет, программы будут весить 1Гб"

Опять же 8Гб + ретина, вполне себе "повод" для замены рабочего инструмента.

Евгений Степанищев (bolknote.ru)
18 апреля 2013, 10:25, ответ предназначен rodem

Опять же 8Гб + ретина, вполне себе «повод» для замены рабочего инструмента.
Я не могу так вот просто покупать себе ноутбуки.

Евгений Степанищев (bolknote.ru)
18 апреля 2013, 10:35, ответ предназначен rodem

но с другой стороны, сейчас 2Гб, из них система съедает условно 1Гб. Будет 8, система всё равно будет кушать 1, а 7 тебе.
Если бы я писал систему, я бы сделал зависимые от размера памяти кеши.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)