:なぜstd :: listはC++ 11上で大きくなっていますか?このコードで
#include <iostream>
#include <list>
int main() {
std::cout << sizeof(std::list<void*>) << std::endl;
};
私はそのGCC 4.7にC++ 98にstd::list<void*>
のサイズは16バイトであり、C++ 11にそのサイズが24バイトで気づくことができました。
私はstd :: listで何が変わったのだろうと思っていました。
技術的な観点からは、この動作は実装固有のものです。図書館の作者は、彼らが好きであれば、正当化せずにクラスを100倍大きくすることを任意に決めることができました。正確に16バイトのリストのサイズに依存するコードを記述することは、おそらく良い考えではありません。これが実際にバグを起こした場所は何でしたか? – templatetypedef
ここをクリックしてください:http://en.cppreference.com/w/cpp/container/list std :: listのC++ 11でいくつかのメンバータイプが変更されていることがわかります。 – dexametason
彼らはおそらくリストのサイズをキャッシュしました。 24バイトは、開始ポインタ、終了ポインタ、およびサイズの3つの64ビット値です。 – Borealid