Как стать автором
Обновить

Комментарии 23

Я хотел сделать скринсейвер, но я графикой никогда не занимался. И у меня был пунктик - нужна поддержка многих мониторов сразу. Кое как вник в Vulkan, шейдеры, вся фигня. Нормально заработало на одном экране. Но при отображении сразу на несколько экранов у меня полезли ошибки, которые никто на форумах объяснить не мог, и тексты в логах, при гуглении которых находятся только исходники той библиотеки ,что их пишет.

В итоге появилось ощущение, что мне сейчас нужно потратить год на изучение теории этого всего, или идти другим путём.

Теперь мой скринсейвер открывает Internet Explorer на весь экран без элементов интерфейса, в нём грузится страница, а на ней моя анимация на TypeScript. Всё плавно и сочно, никаких подтормаживаний. Стартует секунды две, в основном из-за антивируса. Система сообщает, что на два экрана готова рисовать до 5 000 FPS, но конечно она VSync-нута. EXEшник весит 5 Мб, жор памяти ОС показывает 3 Мб.

Так что может ну их нафиг уже, эти примитивы...

Помню была такая штука как «Демо сцены» - маааленькие экзешники, которые выводили на экран всякие потрясающие штуки

Есть челленджы по процедурной графике,.где в пару кб шедевры впихивают

И .kkrieger занимает 96 КБ на диске...

Так они и сейчас есть.

А как там нынче с .com? Во времена доса когда не нужно было больше 64кб оперативки компилировл в .com. размер получался смехотворный.

org 100; ret;

Работает, но нельзя привязывать библиотеки

Разве работает? Я думал с win10 выпилили.

Если и дальше бороться за истинный размер файла, то далее будет препарирование непосредственно самого бинарника, т.к можно выкинуть 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Кб.

Дельфи 3 ЕМНИП около 25 КБ без оптимизации. И 2,4 КБ с нею.
Ещё можно юзать командный процессор для прямого программирования в машинных кодах:
copy con reboot.com & [Alt+205, Alt+25] & ^Z
И всё же по соотношению функциональности к цене почти ничто не может быть лучше
Бесконечно выгодной программы.

Прикол обычно в том, что размер кода в играх - меньшая из проблем, т.к. основной объём занимают звуки и текстуры/материалы к моделям, когда на одну модель приходитсся несколько текстур с разрешением 2k+ - карты высот, теней/освещения, маски прозрачности и прочее в том же духе. Ну и звуки соотвественно на озвучку всех тех сотен часов диалогов, кои присутвуют в том же RDR2, это не считая тысяч SFX, включая озвучку взаимодействия разных же материалов.

Я считаю, здесь нужно упомянуть Animal Well, который занимает меньше 40 Мб при наличии весьма красивой графики. А также консольные вещи вроде NetHack, некоторые модификации которого, к моему большому удивлению, весят больше Animal Well.
И при этом в этих играх — удивительное внимание к деталям.

Батник получился бы в разы меньше. Особенно сплевывающий в консоль.

Давайте перечитаем программу от начала и до конца и найдем нашего следуещего врага. printf — вот он!

В этот момент ожидал, что автор вспомнит про puts().

А я про WriteConsoleA

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации