Почему меня беспокоит размер программы
В комментариях к одной из заметок, где я показывал программу на Гугл Гоу меня спросили почему мне так важен размер программы, я там как раз сетовал, что размер скомпилированной программы получился около четырёх мегабайт.
С одной стороны, конечно, средства хранения сейчас дёшевы и для современных дисков это не объём. С другой стороны, с оперативной памятью всё несколько похуже. Мы пока разделяем два пространства: пространство выполнения программ и пространство их хранения. Хотя идут эксперименты по их совмещению, в продаже пока ничего подобного нет.
Поэтому данность: количество оперативной памяти ограничено, в случае моего ноута — сильно ограничено, у меня их всего 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:
Если бы я писал систему, я бы сделал зависимые от размера памяти кеши.