demomakers如何获得超小型文件?

dev*_*ott 4 c++ assembly demoscene filesize demo

当我在youtube上观看demoscene视频时,作者经常吹嘘他们的文件大小是64kb或更少,有些只有4kb.当我用C++编译一个非常基本的程序时,可执行文件总是至少90kb左右.这些演示是完全用汇编写的吗?我的理解是,demomakers也使用了c/c ++.

Dam*_*mon 8

这些演示不使用标准库(不是C++,甚至不是C标准库),也不使用标准库(以避免导入表大小).它们仅动态链接所需的绝对最小值.
演示的"主要功能"通常与入口点相同(不同于正常程序,其中入口点是CRT初始化函数,它执行某些特定于操作系统的设置,初始化全局变量,运行构造函数,并最终调用main).

通常,演示可执行文件不符合可执行格式的规范(省略最小部分大小和对齐),并使用exe-packer进行压缩.从技术上讲,这些都是"破碎"的程序,但它们只是"破碎"得太多,以至于它们仍能成功运行.

此外,此类演示严重依赖于程序生成的内容.

  • @JulienGuertault:不,他们根本没有静态链接任何东西,那是令人生畏的。它们是动态链接的,但绝对是最低限度的。IAT/thunk 占用空间,因此您希望尽可能少,即使这意味着程序不符合标准(只要它在不崩溃和生成图像/动画的意义上“有效”,即很好)。 (3认同)
  • 你真的没有选择:如果你想制作一个 win32 程序,你需要静态链接一些库,如果你也想使用 OpenGL。诀窍是尽可能少地链接它们(通过重写您需要的东西,例如 CRT),并尽可能少地使用链接的那些,同时积极删除未使用的代码。虽然其中一些库在幕后执行动态链接系统 DLL,但无论如何这都是竞争规则允许的范围。 (2认同)

Lau*_*ent 7

我是Felix的Workshop and Immersion(由Ctrl-Alt-Test制作的64k简介)的编码员之一。如今,大多数64k简介都使用C ++(例外:Logicoma使用Rust)。对于4k简介,汇编可能有意义(尽管大多数实际上使用C ++),但对于64k简介则没有意义。

这是最重要的两件事:

  • 不使用标准库进行编译。那是最重要的事情。
  • 压缩您的二进制文件(在Windows上为kkrunchy进行64k简介,在Windows上为Crinkler进行4k简介)。

现在,您可以在填充64kB之前编写大量代码。如何使用它们?程序生成。

  • 对于音乐,音乐表被压缩。乐器是用软合成器生成的。一个流行的选项(虽然有些过时了)是使用Farbrausch的v2
  • 如果需要纹理,请生成它们。
  • 如果需要3D模型,请生成它们。
  • 动画和效果是程序性的。
  • 对于相机,保存一些关键位置并进行插值。

想更多地了解程序生成和其他技术吗?检查IQ的文章

如果您想进一步优化代码,请参考以下一些技巧:

  • 您可能使用了大量的浮点数。尝试截断浮动元素的尾数(可以节省很多kB)。
  • 禁用函数内联(它为我节省了2kB)。
  • 尝试使用fastcall调用约定(它为我节省了0.7kB)。
  • 禁用对异常的支持。您不需要它们。
  • 如果使用类,请避免继承。
  • 如果使用模板,请当心。

在典型的4k简介中,C ++代码用于音乐和初始化。图形在着色器中完成。


Ton*_*ony 3

这些超小型程序通常不依赖于任何库或框架,这在传统应用程序开发中是典型的。这些程序通常直接访问图形/io等。

  • @user1095108但是OpenGl/DirectX代码驻留在DLL中而不是必须链接的库中(因此会增加文件大小) (4认同)
  • 好吧,你错了。Windows 演示使用“OpenGL”或“DirectX”。 (2认同)