Turbo C++ 和 Borland C++ 编译器的区别

Difference between Turbo C++ and Borland C++ compiler

我使用 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 中检查了这些编译器的 First Code 并发现了这些图表:

Turbo C++

Borland C++

现在我有这些问题希望你能回答
1-为什么 Borland C++ 编译的文件是相同的,其中一个显然没有一些包含而另一个有?
2-为什么Boland C++编译的文件那么大? (大了将近 10 倍)那么大是什么编译出来的?
3-当我向 this Site 提交第一个代码时,我可以看到简单的 void main 函数的汇编代码,我意识到 Borland C++ 代码非常相似,但是 Turbo C++ 汇编代码非常非常复杂而且不是一样,为什么?
4-为什么这个用 Turbo C++ 编译的简单代码创建了这么多你可以在它的图中看到的函数?

抱歉问了这么长的问题,但如果你能向我澄清一下那就太棒了,我现在很困惑。

我会尽力回答这些问题,但您可能需要 post 将您的问题提交至 Borland 论坛以获得详细解答。无论如何,升级你的编译器。

1-Why Borland C++ compiled files are the same when one of them clearly dosen't have some include and another have?

您的程序没有任何功能而且不正确。 (main 函数 returns 和 int,总是。)

您可以包含所有需要的头文件。您不使用它们,因此不会生成额外的代码。

您的程序不需要任何头文件。它们具有相同的功能。

2-Why Boland C++ compiled files are that big? (nearly 10 times bigger) and what is compiled that have that much size?

有很多种可能性。您必须查看生成的汇编代码、生成的机器代码或 post 到 Borland 论坛。

这还要看你是在Debug模式下还是Release模式下编译的。还要看你编译的是静态库还是动态库。

从根本上说,Borland 编译器生成的代码可能符合更高版本 Windows 所要求的标准,而不是 Turbo C++ 需要支持的标准。研究“.com”和“.exe”格式之间的区别。

3-When i submit First Code to this Site i can see the assembly code of simple void main function and i realized that Borland C++ code is very much the same but Turbo C++ assembly code is very very complicated and isn't the same, why?

查看我对 #2 的回答。

4-Why this simple Code that compiled with Turbo C++ create this much functions that you can see in it's graph?

很可能是因为您在调试模式下编译;或者因为 Turbo C++ 是一个更简单的编译器,它不像 Borland 那样优化库和代码。在调试模式下,可执行文件中放置了符号信息。

顺便说一句,可执行文件的大小可能不是放在内存中的可执行代码的大小。可执行格式允许在文件中放置可执行代码以外的内容,例如程序符号和行号。

不用再担心程序大小了。在优化大小之前让程序正确、稳健和安全地工作。