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

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

Hello

I solved this task, but I have a question.

First of all I submitted this code

TL : 0.04 Memory : 1672

Then I resubmitted this code but without #include <iostream>

TL: 0.04 but Memory : 1088

Question: For what spends memory in iostream?

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

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

it should be because of the template functions a header file uses ... :)

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

Отвечаю на русском, т.к. топик в русской ветке.

Судя по всему, дело в буферах стандартных потоков C++ (cin, cout, cerr, clog и их юникодных аналогов). Дело в том, что эти потоки скорее всего реализованы как обертки для сишных потоков и имеют отдельный буфер. Т.о., когда ты не подключаешь <iostream>, буферы создаются только для сишных потоков, а когда подключаешь — еще и для оберток.

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

    Думаю, слово обертки тут неприменимо — синхронизацию ведь можно отключить и iostreams будут работать без cstdio.

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

      Ну так это все compiler-specific, в том же VC++ синхронизация не отключается.

      Суть не в этом. В <iostream> определены глобальные объекты, которые нужно инициализировать. В этих объектах есть буферы, которые нужно инициализировать (это делается еще до запуска main(), в котором ты отключаешь синхронизацию). Вот отсюда и overhead.

      P.S. Для тех неадекватов, что наставили мне минусы на комментарий выше: зайдите в профиль автора топика. Вспомните, что Казахстан — страна бывшего СССР, и русский язык тут знают.