差異

2015-06-26 45 views
-1

我編譯使用的Turbo C++ 3.0和Borland C++ 5.02編譯器兩個代碼,並發現一些奇怪的事情來了我的鱈魚是這樣的:差異

第一個代碼

void main() 
{ 
} 

第二個代碼

#include<iostream.h> 
#include<conio.h> 
void main() 
{ 
} 

我得到了這些結果從他們身上:
- 的Borland C++(第一碼):51KB
- 的Borland C++(第二碼):51KB
- 渦輪C++(第一碼):5.89KB
- 渦輪C++(第一碼):16.3KB
我檢查兩個Borland使用十六進制查看器執行文件,並意識到它們完全相同。
我檢查了第一個代碼在IDA pro形成這些編譯器和遇到這些圖:

的Turbo C++
turboC++

的Borland C++
borlandC++

現在我有這些問題,我'd喜歡你回答
1-爲什麼Borland C++編譯文件a當他們中的一個明顯沒有包括另一個包含時,他們是否也是如此?
2 - 爲什麼Boland C++編譯的文件很大? (接近10倍大)以及編譯的內容大小如何?
3 - 當我將第一個代碼提交到this Site時,我可以看到簡單的void main函數的彙編代碼,並且我意識到Borland C++代碼非常相似,但Turbo C++彙編代碼非常複雜並且不一樣,爲什麼?
4-爲什麼使用Turbo C++編譯的這個簡單的代碼創建了很多功能,您可以在它的圖形中看到?

對不起這個很長的問題,但如果你可以澄清這對我來說這將是很棒的我現在很困惑。

+0

使用'tdump.exe'來查看可執行文件中的內容 –

+0

簡而言之:Turbo C++ buggy。但是你使用了優化嗎? –

+0

我不確定我沒有更改任何這些軟件中的編譯設置 –

回答

1

我會盡我所能回答這些問題,但您可能需要將問題發佈到Borland論壇以獲取詳細解答。無論如何,升級你的編譯器。

1 - 爲什麼Borland C++編譯的文件是相同的,當他們中的一個顯然不具有一些包含和另一個有?

你的程序沒有功能,是不正確的。 (main函數始終會返回int。)

您可以包含所需的所有頭文件。您不使用它們,因此不會生成其他代碼。

你的程序不需要任何頭文件。具有相同的功能。

2 - 爲什麼Boland C++編譯的文件很大? (接近10倍大)以及編譯的內容大小如何?

有很多可能性。您必須查看生成的彙編代碼,生成的機器代碼或發佈到Borland論壇。

這也取決於您是以調試模式還是以發佈模式編譯。這也取決於你是編譯靜態庫還是動態庫。

從根本上說,Borland Compiler可能會生成符合Turbo C++要求支持的更高版本Windows所需標準的代碼。研究「.com」和「.exe」格式之間的區別。

3,當我提出第一個代碼到這個網站,我可以看到簡單無效的主要功能的彙編代碼,我意識到,Borland的C++代碼是大同小異,但的Turbo C++彙編代碼是非常非常複雜,ISN同樣的,爲什麼?

查看我對#2的回答。

4 - 爲什麼用Turbo C++編譯的這個簡單的代碼創建了這麼多函數,你可以在它的圖中看到?

很可能是因爲您在調試模式下編譯;或者因爲Turbo C++是一個更簡單的編譯器,它並不像Borland那樣優化庫和代碼。在調試模式下,將符號信息放入可執行文件中。

順便說一下,可執行文件的大小可能不是放置在內存中的可執行代碼的大小。可執行格式允許將可執行代碼以外的內容放置在文件中,例如程序符號和行號。

不用擔心程序大小了。在優化尺寸之前讓程序正確,穩健且安全地工作。