#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:临时对象的析构函数确实在分号之前调用。