在C++代码的开头,我初始化了一个1000000(一百万)bool类型数据的 vector 。但是,在valgrind中,最大堆+堆栈使用情况显示为200Kb。考虑到 bool 值是1字节,难道不是1 Mb吗?

有我没有意识到的优化吗?还是我错过了什么?

谢谢是提前。

我使用Ubuntu64 16.04系统。编译不带-O参数的代码。

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

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

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

最佳答案

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

在这种情况下,其大小与-Os相同,并且如果使用-O1或更高版本,则编译器将不使用位 vector ,换句话说,每个 bool 变量占用1个字节;否则,编译器选择位 vector (http://www.cplusplus.com/reference/vector/vector-bool/)

10-06 05:11
查看更多