не таким же образом двоичный / текст, что потоковая передача? (Однако, даже если это не так, обычно это будет около 10% размера файлов. Это может привести к одному дополнительному выделению, а не к произвольной сумме.)

ел бы прочитать файл в строку. Я ищу разные способы, как сделать это эффективно.

Использование фиксированного размера * символьный буфер

Я получилответ от Тони, который создает буфер 16 КБ, читает в этот буфер и добавляет буфер, пока больше нечего читать. Я понимаю, как это работает, и я нашел это очень быстро. Что я не понимаю, так это то, что в комментариях к этому ответу сказано, что таким образом все копируется дважды. Но, насколько я понимаю, это происходит только в памяти, а не с диска, поэтому это почти незаметно. Это проблема, что он копирует из буфера в строку в памяти?

Использование istreambuf_iterator

другой ответ Я получил использует istreambuf_iterator. Код выглядит красиво и минимально, но он очень медленный. Я не знаю, почему это происходит. Почему эти итераторы такие медленные?

Использование memcpy ()

Заэтот вопрос Я получил комментарии, что я должен использовать memcpy (), так как это самый быстрый нативный метод. Но как я могу использовать memcpy () со строкой и объектом ifstream? Разве ifstream не должен работать со своей функцией чтения? Почему использование memcpy () разрушает переносимость? Я ищу решение, которое совместимо с VS2010, а также GCC. Почему memcpy () не работает с ними?

+ Любой другой эффективный способ возможен?

Что вы посоветуете, какую оболочку я использую для небольших бинарных файлов размером менее 10 МБ?

(Я не хотел разбивать этот вопрос на части, так как меня больше интересует сравнение между различными способами, как я могу прочитать ifstream в строку)

Ответы на вопрос(2)

Ваш ответ на вопрос