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

Автор lis05, история, 3 года назад, По-английски

What's going on??

Hello codeforces! Recently, i've noticed that codeforces custom test with g++ 17 uses more than 500bytes per empty std::queue, while sizeof shows only 40bytes. This problem is also with std::deque. What's going on? Compiled with GNU G++17 7.3.0

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

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

Auto comment: topic has been updated by lis05 (previous revision, new revision, compare).

»
3 года назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Nevermind, I misunderstood that you were comparing the computed value with the memory reported under the =====.

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    sizeof(arr)/1000 shows size in kb, look at the second image

    sizeof(arr)/NMAX shows size in bytes for single queue

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

std::queue uses std::deque under the hood by default. And in GCC's libstdc++ standard library the latter allocates elements dynamically in chunks of ~512 bytes by default, see M_initialize_map here, plus one chunk extra. It's that extra chunk which makes std::deque weigh slightly more than 500 bytes.