#include <vector>
typedef std::vector<char> vc;
typedef std::vector<vc> vvc;
vvc f() {
const int N = (1 << 15);
return vvc(N, vc(N)); // 1 GB
}
int main () {
vvc v;
v = f();
while(true); // Why 2GB allocated ?
return 0;
}
clang -O2 と g++ -O2 の両方でコンパイル。同じ動作。
編集:いくつかの回答で指摘されているこのコードを修正するには、複数の方法があります。しかし、私のポイントは、このコードを理解することです。もちろん一時的なオブジェクトはありますが、セミコロンで消え、1GB のメモリがシステムに返されます。質問は、なぜそれが起こらないのかを尋ねることを意図しています。
編集 2:一時オブジェクトのデストラクタは、セミコロンの前に実際に呼び出されます。