0

次のコードが同じ目的で書かれているとします。残りのプログラムのコードは同じです。
コード1

#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 で得られたアセンブリ結果を比較しました。
驚いたことに、2 番目のプログラムの行数は 1778 で、最初のプログラムは 630 です。これは、最初のプログラムの方が優れていることを意味します。
この動作の理由を説明するために、「テンプレート ベースのプログラムのコンパイル方法」に関する適切なリソースを探しましたが、見つかりませんでした。

テンプレートを使用するプログラムは、コンパイラによってどのようにアセンブリにコンパイルされますか? あなたは良いリソースを持っていますか?(これは宿題ではありませんが、私の職場で与えられた自習問題です。答えを出さないと思われる場合は、少なくとも良いリソースを教えてください)

4

1 に答える 1

7

あなたが見つけた行動はまったく驚くべきことではありません。コンパイラは、テンプレートを使用して必要な数のクラスを生成します。最初の例では 1 つ ( vector<int>) を生成するだけで済みますが、2 番目の例では 4 つ生成する必要があります。もちろん、これによりさらに多くのコードが生成されます。

どちらが優れているかという問題については、もちろん、その目的をよりよく果たすものです。しかし、それを知ることができるのはあなただけです。

于 2013-01-03T11:59:52.427 に答える