Valgrind在C++代码中显示意外输出

Max*_*hon 5 c++ memory valgrind stdvector c++11

在C++代码的开头,我初始化一个1000000(百万)bool类型数据的向量.但是,在valgrind中,最大堆+堆栈使用量显示为200Kb.鉴于Bool是1字节,不应该是1 Mb?

有没有我没有意识到的优化?或者我错过了什么?

谢谢你的提前.

我使用的是Ubuntu64 16.04系统.编译没有-O参数的代码.

编辑:代码可以简化为此,

vector<bool> * isPrime;
int main(){
    isPrime = new vector<bool>(1000000, true);
}
Run Code Online (Sandbox Code Playgroud)

编辑2:似乎有一个我没有意识到的优化(在评论中说明).谢谢.

小智 0

不带-O参数编译代码就等于-O0,并且-O0并不意味着没有优化。您可以在https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html中查看 gcc 优化的定义

在这种情况下,大小与-Os相同,如果使用-O1或更高,编译器不使用位向量,也就是说每个bool变量占用1个字节;否则编译器选择位向量(http://www.cplusplus.com/reference/vector/vector-bool/