Комментарии 23
Я хотел сделать скринсейвер, но я графикой никогда не занимался. И у меня был пунктик - нужна поддержка многих мониторов сразу. Кое как вник в Vulkan, шейдеры, вся фигня. Нормально заработало на одном экране. Но при отображении сразу на несколько экранов у меня полезли ошибки, которые никто на форумах объяснить не мог, и тексты в логах, при гуглении которых находятся только исходники той библиотеки ,что их пишет.
В итоге появилось ощущение, что мне сейчас нужно потратить год на изучение теории этого всего, или идти другим путём.
Теперь мой скринсейвер открывает Internet Explorer на весь экран без элементов интерфейса, в нём грузится страница, а на ней моя анимация на TypeScript. Всё плавно и сочно, никаких подтормаживаний. Стартует секунды две, в основном из-за антивируса. Система сообщает, что на два экрана готова рисовать до 5 000 FPS, но конечно она VSync-нута. EXEшник весит 5 Мб, жор памяти ОС показывает 3 Мб.
Так что может ну их нафиг уже, эти примитивы...
Помню была такая штука как «Демо сцены» - маааленькие экзешники, которые выводили на экран всякие потрясающие штуки
А как там нынче с .com? Во времена доса когда не нужно было больше 64кб оперативки компилировл в .com. размер получался смехотворный.
Где то была статья, для минимального exe брать VC5 (Visual Studio 97)
а еще есть UPX
Если и дальше бороться за истинный размер файла, то далее будет препарирование непосредственно самого бинарника, т.к можно выкинуть DOS-stub, поместить библиотеку импорта и данных в одну секцию рядом, и также оставить alignment маленьким, и в итоге получить что-то абсолютно крошечное.
P.S. Ради спортивного интереса, на основе предоставленного минимального файла, используя бинарный редактор, ловкость рук и со скрипом зубов мне удалось сделать минимально работающий вариант в 376 байт. Запускал соответственно на Win10 x64.
P.P.S. Я пробовал установить поля FileAlignment и SectionAlignment отличные от тех что рисует компилятор (обычно это 0x200 и 0x1000) на другие произвольные значения, но все они давали нерабочий х32 бинарник, что впрочем следует из их документации, так что допустимое значений 0x8 в PE32+ стала в какой-то степени неожиданностью.
Я относительно недавно баловался с минимизацией размера исполняемых файлов, вот результаты. Простейший Hello World в 32-битном режиме умещается в 624 байта. Но это с использованием MSVC, а не MinGW. А в 4 килобайта можно уже какую-нибудь графическую демку или игру вроде Тетриса уместить.
Некоторые простейшие приложения требуют под 200-300 МБ,
можно подумать там .exe такой большой, там же не просто electron а еще и либы, на все случаи жизни
а вот в играх еще модели всяккие, текстуры, видео и музыка, их наоборот добавляют чтобы не напоминало тусовку мыльных пикселей
А Turbo Pascal сразу без оптимизаций делал минимальный exe в 16Кб.
#include <windows.h>
void main(){
MessageBoxA(0, "Hello, world!", "Hello, world!", 0);
}
tcc main.c -luser32
main.exe: 3584 bytes
Дельфи 3 ЕМНИП около 25 КБ без оптимизации. И 2,4 КБ с нею.
Ещё можно юзать командный процессор для прямого программирования в машинных кодах:
copy con reboot.com & [Alt+205, Alt+25] & ^Z
И всё же по соотношению функциональности к цене почти ничто не может быть лучше
Бесконечно выгодной программы.
Прикол обычно в том, что размер кода в играх - меньшая из проблем, т.к. основной объём занимают звуки и текстуры/материалы к моделям, когда на одну модель приходитсся несколько текстур с разрешением 2k+ - карты высот, теней/освещения, маски прозрачности и прочее в том же духе. Ну и звуки соотвественно на озвучку всех тех сотен часов диалогов, кои присутвуют в том же RDR2, это не считая тысяч SFX, включая озвучку взаимодействия разных же материалов.
Я считаю, здесь нужно упомянуть Animal Well, который занимает меньше 40 Мб при наличии весьма красивой графики. А также консольные вещи вроде NetHack, некоторые модификации которого, к моему большому удивлению, весят больше Animal Well.
И при этом в этих играх — удивительное внимание к деталям.
Батник получился бы в разы меньше. Особенно сплевывающий в консоль.
Уничтожение EXE: 640 Байт для программы на C