Когда я смотрю демосценовые видео на YouTube, автор часто хвастается, что их размеры файлов составляют 64 КБ или меньше, а некоторые — всего 4 КБ. Когда я компилирую даже очень простую программу на C ++, исполняемый файл всегда имеет размер не менее 90 КБ или около того. Эти демо написаны полностью в сборке? Насколько я понимаю, демомейкеры также использовали c / c ++.
Эти демонстрационные ролики не используют стандартную библиотеку (не C ++ и даже не стандартную библиотеку C) и не связываются со стандартными библиотеками (чтобы избежать импорта размеров таблиц). Они динамически связывают только необходимый абсолютный минимум.
«Основная функция» демонстрации обычно совпадает с точкой входа (в отличие от обычной программы, где точкой входа является функция инициализации CRT, которая выполняет некоторые специфичные для ОС настройки, инициализирует глобальные переменные, запускает конструкторы и, в конце концов, вызывает main
).
Обычно демонстрационные исполняемые файлы не соответствуют спецификациям (за исключением минимальных размеров и выравниваний разделов) исполняемого формата и сжимаются с помощью exe-упаковщика. Технически, это «сломанные» программы, но они настолько «сломаны», что все еще успешно работают.
Кроме того, такие демонстрации сильно зависят от процедурно генерируемого контента.
Я один из кодеров Мастерская Феликса а также погружение (64 тыс. Вступлений по Ctrl-Alt-Test). В настоящее время большинство 64-тысячных вступлений используют C ++ (исключение: Logicoma использует Rust). Сборка может иметь смысл для вступлений 4k (хотя большинство из них на самом деле используют C ++), но не для вступлений 64k.
Вот две самые важные вещи:
Теперь вы можете написать тонну кода перед заполнением 64 КБ. Как их использовать? Процедурное поколение.
Хотите узнать больше о процедурной генерации и других методах? Проверьте Статьи IQ.
Если вы хотите дополнительно оптимизировать свой код, вот несколько дополнительных приемов:
В типичном введении 4k код C ++ используется для музыки и инициализации. Графика выполнена в шейдере.
Эти сверхмалые программы, как правило, не зависят от каких-либо библиотек или сред, что типично для традиционной разработки приложений. Эти программы обычно обращаются к графике / вводу и т. Д. Напрямую.
Я пока не могу комментировать, потому что у меня нет 50 точек повторения, поэтому я отвечаю.
Одним из способов создания меньшей программы является использование более старого компилятора, такого как Microsoft Visual C / C ++ 4.0, который создает файл .exe меньшего размера, чем, скажем, Microsoft Visual Studio 2005.
Это действительно зависит от вашей среды, но если вы этого не сделаете
создавать экземпляры любых шаблонов, и вы все динамически связываете,
довольно легко получить очень маленький размер для вашего
исполняемый файл, так как ни один код, который вы фактически выполняете, не будет
в исполняемом файле.