Блог пользователя sivukhin

Автор sivukhin, 12 лет назад, По-русски

Долго мучаюсь с вот таким кодом: http://pastie.org/7267585 По непонятной мне причине, если запустить его в "Запуске" Codeforces, то после исполнения на тесте n = 10000, нам покажут информацию, в которой говорится, что использовано 98032 КБ. Забавно, что столько же памяти используется, если завести не массив bool, а массив char

Почему так происходит?

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

Вы не поверите, но потому что sizeof(bool) == sizeof(char) == 1.

Если заменить массив на vector, то он сожмет в 8 раз.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +25 Проголосовать: не нравится

    Если быть предельно точным, то:

    1. sizeof(char) == 1 по определению, и размер любого другого типа кратен размеру char (который может быть не обязательно 8 бит).
    2. sizeof(bool) — implementation defined, в стандарте C++ даже есть примечание "sizeof(bool) is not required to be 1".
    3. На практике чаще всего sizeof(bool) == 1.
»
12 лет назад, # |
Rev. 2   Проголосовать: нравится -8 Проголосовать: не нравится

дал маху

»
12 лет назад, # |
  Проголосовать: нравится -14 Проголосовать: не нравится

А ещё вы не поверите, но в мегабайте не 1000000 байт.