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

时间:2018-05-02 22:10:44

标签: c++ c++11 memory valgrind stdvector

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

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

谢谢你的到来。

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

修改:代码可以简化为此,

vector<bool> * isPrime;
int main(){
    isPrime = new vector<bool>(1000000, true);
}

Edit2:似乎有一个我没有意识到的优化(在评论中说明)。感谢。

1 个答案:

答案 0 :(得分: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/