演示制造商如何获得超小文件?

时间:2014-02-09 20:42:14

标签: c++ assembly filesize demo demoscene

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

5 个答案:

答案 0 :(得分:7)

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

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

此外,此类演示在很大程度上依赖于程序生成的内容。

答案 1 :(得分:5)

我是Felix's WorkshopImmersion的编码员之一(按Ctrl-Alt-Test进行64k介绍)。现在大多数64k的介绍使用C ++(例外:Logicoma使用Rust)。汇编可能对4k的介绍有意义(尽管其中大多数实际上使用的是C ++),但不适用于64k的介绍。

以下是两件最重要的事情:

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

现在,您可以在填写64kB之前编写大量代码。怎么用?程序生成。

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

想要了解有关程序生成和其他技术的更多信息吗?检查IQ's articles

如果你想进一步优化你的代码,这里有一些额外的技巧:

  • 你可能会使用很多花车。尝试truncate the mantissa of your floats(它可以节省很多kB)。
  • 禁用函数内联(它节省了2kB)。
  • 尝试使用fastcall调用约定(它为我节省了0.7kB)。
  • 禁用对异常的支持。你不需要它们。
  • 如果您使用类,请避免继承。
  • 使用模板时要小心。

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我还不能发表评论,因为我没有50个代表点,所以我正在回答。

创建较小程序的一种方法是使用较旧的编译器,例如Microsoft Visual C / C ++ 4.0,它生成比Microsoft Visual Studio 2005更小的.exe文件。

答案 4 :(得分:1)

这实际上取决于您的环境,但如果您不这样做 实例化任何模板,并动态链接所有内容, 你可以很容易地实现一个非常小的尺寸 可执行文件,因为您实际执行的代码都不是 在可执行文件中。