Valgrind показывает неожиданный вывод в коде C ++ - PullRequest
0 голосов
/ 03 мая 2018

В начале кода C ++ я инициализирую вектор из 1000000 (миллиона) данных типа bool. Тем не менее, в valgrind максимальное использование кучи + стека показывается 200Kb. Учитывая, что Bool равен 1 байту, не должен ли он быть 1 Мб?

Есть ли оптимизация, которую я не понимаю? Или я что-то упустил?

Спасибо заранее.

Я использую систему Ubuntu64 16.04. Компиляция кода без параметра -O.

Редактировать: Код можно упростить до этого,

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

Edit2: Кажется, была оптимизация, которую я не понимаю (о чем говорится в комментариях). Спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Компиляция кода без параметра -O равна -O0, а -O0 не означает никакой оптимизации. Вы можете увидеть определение оптимизации gcc в https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

В том случае, если размер такой же, как -Os, и если вы используете -O1 или выше, компилятор не использует битовый вектор, другими словами, каждая переменная bool занимает 1 байт; в противном случае компилятор выбирает битовый вектор (http://www.cplusplus.com/reference/vector/vector-bool/)

...