为什么源代码比应用程序大?

时间:2014-06-18 19:13:35

标签: java android

我开始了解Android应用程序,其源代码大约为18 MB,实际应用程序大小为2.8 MB。为什么会这样?

4 个答案:

答案 0 :(得分:4)

Java代码被转换为更简洁的字节代码。例如

int httpServerPortToUse = 58000; // (32 bytes of source code)

转换为以下字节代码

iconst_58000 // (1 byte for opcode + 4 bytes for integer = 5 bytes)

在此示例中,java字节代码比java源代码小6倍以上。

答案 1 :(得分:2)

编译器删除了我们阅读它所需的大量代码数据/可视化表示。有关Android如何编译代码的信息,请参阅this

有趣的事实:你知道Rollercoaster Tycoon完全是用汇编代码写的吗?

答案 2 :(得分:0)

除了已发布的答案外,每个空格,制表符,换行符和注释都会占用源代码中的空格。所有这些都被编译器删除,因为它对功能都没用。

此外,.apk文件是一种zip存档文件,因此它们在编译器之上压缩,删除数据。 [1]

答案 3 :(得分:0)

这是你提到的一个有趣的事实。

我总是发现未编译的源代码比输出应用程序文件小。

然而,在你的情况下,它可能并不总是如此。编译器可以在编译之前优化和最小化源代码。

有人可以写

souce_code_1.c

#include <stdio.h>

    int main()
    {
      printf("Hello World");
      return(0);
    }

souce_code_2.c

#include <stdio.h>

    int main()
    {
      printf













      ("Hello World");
      return(0);
    }

这里,souce_code_2.c肯定会比souce_code_1.c的大 但是,如果你编译它们并检查你会注意到可执行文件的大小几乎相同。

为什么这样开心呢?

艰难的souce_code_1.c和souce_code_2.c产生相同的输出,souce_code_2.c有许多元素并不真正有助于代码的输出。编译器摆脱了所有这些元素。

这是一个非常简单的例子,但还有更多。 如果您对如何从源编译可执行文件感兴趣,请阅读Principles of Compiler Design