Почему меня беспокоит размер программы
В комментариях к одной из заметок, где я показывал программу на Гугл Гоу меня спросили почему мне так важен размер программы, я там как раз сетовал, что размер скомпилированной программы получился около четырёх мегабайт.
С одной стороны, конечно, средства хранения сейчас дёшевы и для современных дисков это не объём. С другой стороны, с оперативной памятью всё несколько похуже. Мы пока разделяем два пространства: пространство выполнения программ и пространство их хранения. Хотя идут эксперименты по их совмещению, в продаже пока ничего подобного нет.
Поэтому данность: количество оперативной памяти ограничено, в случае моего ноута — сильно ограничено, у меня их всего 2ГиБ, это мало по нынешним временам, но что делать. Типичные современные объёмы оперативной памяти не отличаются от этой цифры на порядки, обычно это 4—8 ГиБ.
![]() |
Соответственно, меня расстраивают большие программы просто по той причине, что они занимают много памяти, которой и так немного. Если у вас открыт браузер, Фотошоп, Офис и ещё что-то, велика вероятность, что свободной памяти в системе почти нет и запуск ещё одной программы вызовет сброс на диск какого-то региона памяти и высвобождение его для новой программы.
Соответственно, чем больше некомпактных утилит (например, на «Гоу») будет работать, тем меньше у меня памяти, тем медленнее система, что меня расстраивает, конечно.
Размер скомпилированной программы это далеко не всё. Например, я переписал считалку тарифов для питерского метро с C++ на Rust. Скомпилированные проги различаются в 2 раза — 22 кб против 51, а вот потребление памяти выросло в 10 раз
Комментарий для sunchaser.info:
Согласен, так тоже бывает, но это размер скомпилированной программы я сразу вижу и он меня сразу расстраивает :)
Комментарий для Евгения Степанищева:
сжатие upx приводит к дополнительному потреблению ram. особенно, если запускается более одной копии программы одновременно.
Комментарий для zg.livejournal.com:
http://ru.wikipedia.org/wiki/UPX
Правда, версия UPX 3 и выше использует LZMA, по-умолчанию.
Комментарий для Евгения Степанищева:
для распакованного кода для каждой копии программы будет отдельная копия. для нормального — одна на всех. распакованный код вытесняется в своп.
ну и оверхеда в 100 байт не бывает. минимум 4кб. на практике возможно и больше.
Ну тут два варианта:
— поменять ноутбук
— применить другой инструмент, вместо golang
Придётся искать компромисс, как ни крути.
Комментарий для rodem:
Я уже писал, что он не весь статически линкуется:
Интересно, откуда в Гоу форк и для чего он там?
Комментарий для rodem:
Как не меняй, беда в том, что оперативной памяти на порядок не увеличится. Обычные цифры — 4—8. А аппетиты Гоу растут. Версия 0.60 компилировала одну мою программу в файл размером 1,6 мегабайта, версия один компилирует уже в файл размером 2,2МиБ.
но с другой стороны, сейчас 2Гб, из них система съедает условно 1Гб. Будет 8, система всё равно будет кушать 1, а 7 тебе. Вполне себе порядок.
ну линейная экстраполяция тут явно лишняя «через 10 лет, программы будут весить 1Гб»
Опять же 8Гб + ретина, вполне себе «повод» для замены рабочего инструмента.
Комментарий для rodem:
Я не могу так вот просто покупать себе ноутбуки.
Комментарий для rodem:
Если бы я писал систему, я бы сделал зависимые от размера памяти кеши.