在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:似乎有一个我没有意识到的优化(在评论中说明)。感谢。
答案 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/)