我使用Turbo C ++ 3.0和Borland C ++ 5.02编译器编译了两个代码,并且遇到了一些奇怪的事情我的鳕鱼是这样的:
第一个代码
void main()
{
}
第二个代码
#include<iostream.h>
#include<conio.h>
void main()
{
}
我从他们那里得到了这些结果:
- Borland C ++(第一代码):51KB
- Borland C ++(第二代码):51KB
- Turbo C ++(第一代码):5.89KB
- Turbo C ++(第一代码):16.3KB
我用十六进制查看器检查了两个Borland执行文件,并意识到它们完全相同
我在IDA pro
中检查了这些编译器的第一个代码,并看到了这些图:
Turbo C ++
Borland C ++
现在我有这些问题,我希望你能回答
1 - 为什么Borland C ++编译的文件是相同的,当其中一个明显没有一些包含而另一个包含?
2 - 为什么Boland C ++编译的文件很大? (差不多大10倍)和编制的那么大的东西?
3 - 当我向this Site提交第一个代码时,我可以看到简单的无效主函数的汇编代码,我意识到Borland C ++代码非常相似但是Turbo C ++汇编代码非常复杂而且不是同样,为什么?
4 - 为什么这个用Turbo C ++编译的简单代码会创建这么多函数,你可以在它的图形中看到它们?
对于这个很长的问题感到抱歉,但是如果你能向我澄清一下这会很棒我现在很困惑。
答案 0 :(得分:1)
我会尽力回答这些问题,但您可能需要将您的问题发布到Borland论坛以获取详细答案。无论如何,请升级您的编译器。
1 - 为什么Borland C ++编译的文件是相同的,当其中一个明显没有一些包含而另一个包含?
您的程序没有功能且不正确。 (main
函数始终返回int
。)
您可以包含所需的所有头文件。您不使用它们,因此不会生成其他代码。
您的程序不需要任何头文件。具有相同的功能。
2 - 为什么Boland C ++编译的文件很大? (几乎大10倍)和编译的那么多大小?
有很多种可能性。您必须查看生成的汇编代码,生成的机器代码或发布到Borland论坛。
这还取决于您是在调试模式还是在发布模式下编译。它还取决于您是为静态库还是动态库编译的。
从根本上说,Borland编译器可能会生成满足Windows更高版本所需标准的代码,而不是Turbo C ++需要支持的代码。研究“.com”和“。exe”格式之间的区别。
3 - 当我向本网站提交第一个代码时,我可以看到简单的无效主函数的汇编代码,我意识到Borland C ++代码非常相似,但是Turbo C ++汇编代码非常复杂而且不是同样,为什么?
请参阅我对#2的回答。
4 - 为什么这个用Turbo C ++编译的简单代码会创建这么多函数,你可以在它的图形中看到它们?
很可能因为您正在调试模式下进行编译;或者因为Turbo C ++是一个更简单的编译器,它不像Borland那样优化库和代码。在调试模式下,可执行文件中包含符号信息。
顺便说一下,可执行文件的大小可能不是放在内存中的可执行代码的大小。可执行格式允许将除可执行代码之外的东西放置在文件中,例如程序符号和行号。
不要再担心程序大小了。在优化大小之前,使程序正确,稳健且安全地运行。