2013-01-03 55 views
0

說下面的代碼是爲了相同的目的而編寫的。程序的其餘代碼是相同的。
代碼1
使用C++模板的程序編譯過程

#include <vector> 
using namespace std; 
vector<int> vector1; 
vector<int> vector2; 
vector<int> vector3; 
vector<int> vector4; 

碼2

#include <vector> 
using namespace std; 
vector<int> vector1; 
vector<short> vector2; 
vector<char> vector3; 
vector<bool> vector4; 

現在哪一個更好(在可執行文件的大小方面讓)? (提示:考慮可執行文件)

我比較了由g ++ -S給出的彙編結果。
令人驚訝的是第二個程序的行數是1778,第一個是630.這意味着第一個更好。
爲了解釋這種行爲,我尋找了一個「基於模板的程序如何編譯」的好資源,但找不到一個。

使用模板的程序如何被編譯器編譯到程序集中?你有很好的資源嗎? (這不是一門功課,但在我workplace.Should給予自學問題,你覺得不給至少直接我一個很好的資源答案)

+1

定義「更好」:兩段代碼不等價。 – Mat

+1

如果出現以下情況,我們如何挑選更好的人?#1我們實際上沒有一個目標; #2例子沒有產生有趣的結果; #3的例子*做不同的事情*。更好的人可能是做你想做的事的人,因爲......呃,因爲它做你想做的事。 –

+0

編輯了這個問題。其實我的主要問題是這種行爲的原因。 – Dinushan

回答

7

您發現該行爲是不足爲奇的。編譯器根據需要使用該模板生成儘可能多的類。在你的第一個例子中,它只需要生成一個(vector<int>),而在你的第二個例子中它需要生成四個。當然,這會產生更多的代碼。

至於哪一個更好的問題:當然是更好地達到目的的問題。但只有你有能力知道這一點。