在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/)