Станд.:: ifstream значительно медленнее, чем ФАЙЛ?

Почему max составляет 491M (я ожидаю, что оно будет 512M)?

blockquote>

Одно пространство выживших не учитывается в max, поскольку одно из пространств выживших всегда пусто. 116]
Смотри также этот ответ .

Что означает не-куча (кто ее использует)?

blockquote>

MemoryMXBean считает следующие пулы памяти JVM как «не куча»:

[1119 ]
  • Code Cache (или Code Heap) - область для скомпилированных методов и другого динамически генерируемого кода;
  • Metaspace и Compressed Class Space - области для метаданных класса.
    • См. Также этот вопрос .

      Что означает -Xms (начальный размер кучи)?

      blockquote>

      Да, это начальный размер кучи. ОС лениво распределяет страницы в физической памяти (при первом доступе). Вот почему RSS может быть меньше общего зафиксированного размера.

      Подробнее см. в этом ответе .

      Правильна ли приведенная ниже формула

      blockquote>

      Нет. Все гораздо сложнее. Я объяснил это подробно в этот ответ .

    12
    задан Community 23 May 2017 в 10:31
    поделиться

    5 ответов

    Я не думаю, что это имело бы значение. Особенно при чтении символа символом издержки ввода-вывода, вероятно, будут полностью доминировать над чем-либо еще. Почему Вы читаете единственные байты за один раз? Вы знаете, насколько чрезвычайно неэффективный это?

    На файле 326 КБ быстрое решение будет состоять в том, чтобы, скорее всего, просто считать его в память сразу.

    Различие между станд.:: ifstream и эквиваленты C, в основном вызов виртуальной функции или два. Это может иметь значение, если выполняется несколько десятков миллиона раз в секунду, иначе, не reall. файловый ввод-вывод является обычно столь медленным, что API раньше получал доступ к нему, действительно не имеет значения. Какие вопросы намного больше - шаблон чтения-записи. Много из ищет, плохие, последовательные хорошие чтения/записи.

    25
    ответ дан 2 December 2019 в 04:17
    поделиться

    Это должно быть немного медленнее, но как то, что Вы сказали, это не могло бы быть узкое место. Почему Вы не представляете свою программу и видите, если это так?

    4
    ответ дан 2 December 2019 в 04:17
    поделиться

    Я думаю, что это маловероятно, Ваша проблема будет решена путем переключения от fstream до ФАЙЛА*, обычно оба буферизуются библиотекой C. Также ОС может кэшировать чтения (Linux очень хорош в том аспекте). Учитывая размер файла Вы получаете доступ, довольно вероятно, это будет полностью в RAM.

    Как PolyThinker говорят, что Ваш лучший выбор состоит в том, чтобы выполнить Вашу канавку программы профилировщик определение, где проблема.

    Также Вы используете seekg/tellg, это может вызвать известные задержки, если Ваш диск в большой степени фрагментируется, потому что для чтения файла впервые диск должен двигать головами к правильному положению.

    3
    ответ дан 2 December 2019 в 04:17
    поделиться

    Все сравнительные тесты являются злыми. Просто представьте свой код для данных, которые Вы ожидаете.

    Я выполнил сравнение производительности ввода-вывода Ruby, Python, Perl, C++ однажды. Для моих данных, версий языков, и т.д. вариант C++ был несколько раз медленнее (это было большое удивление в то время).

    2
    ответ дан 2 December 2019 в 04:17
    поделиться

    Я соглашаюсь, что необходимо представить. Но если Вы читаете файл символ за один раз, как насчет того, чтобы создать файл с отображенной памятью? Тем путем можно рассматривать файл как массив символов, и ОС должна заботиться обо всей низкоуровневой буферизации для Вас. Самой простой и вероятно быстрым решением является победа в моей книге.:)

    1
    ответ дан 2 December 2019 в 04:17
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: