少し気になっている事がありますので教えてください。
C++のtemplateを使用したソースをビルド(VC6.0)すると、使用しない場合に比べて
作成される実行ファイルサイズが増しているように感じます。
またtemplateを使用したソースは、少しコードを加えただけで結構簡単に実行ファイル
サイズが増大していくように感じています。
上記の事は事実(templateを使用するとファイルサイズ増になり易い)でしょうか。
それとも私の思い違いでしょうか?
事実の場合、ファイルサイズ増大を抑える対策、テクニック等はありますでしょうか?
よろしくお願いします。
環境:WindowsXP+sp2, VC++6.0+sp6, SDK
templateというものが、どういうものか理解していれば、理論的には自明な話なんですが…
まずは、
>C++のtemplateを使用したソースをビルド(VC6.0)すると、使用しない場合に比べて
>作成される実行ファイルサイズが増しているように感じます。
どういうコードを比較したのですか?
template使用コードと"同等の"、使用しないコードで比較しましたか?
例えば、
/*
struct A {
int data_;
A(int data) : data_(data) {}
~A() {}
int data() const { return data_; }
};
/*/
template <typename T>
struct B {
T data_;
B(T data) : data_(data) {}
~B() {}
T data() const { return data_; }
};
//*/
int main() {
/*
A obj(100);
/*/
B<int> obj(100);
//*/
return obj.data();
}
というコードをAとBで切り替えて、ビルドしても生成された実行モジュールサイズは同じでした。
まあ、実際にはtemplateありなしで、いろいろ違いが出てしまうことは避けられないことが
多いので、違いが出てくるのでしょう。
知っていたならばごめんなさい。
template や STL を扱う上での欠点の1つに
乱用時のコードの膨張があります。
template < typename T >
class base { ... };
コード内では template を扱うbaseクラスが1つしか記述されていなくても
base< int > xxx;
base< long > xxx;
base< char > xxx;
それを乱用することにより、型違いの base クラスが結局3つできることになります。
そうすると当然コードサイズは膨らんでいきます。
ツイート | ![]() |