не таким же образом двоичный / текст, что потоковая передача? (Однако, даже если это не так, обычно это будет около 10% размера файлов. Это может привести к одному дополнительному выделению, а не к произвольной сумме.)
ел бы прочитать файл в строку. Я ищу разные способы, как сделать это эффективно.
Использование фиксированного размера * символьный буфер
Я получилответ от Тони, который создает буфер 16 КБ, читает в этот буфер и добавляет буфер, пока больше нечего читать. Я понимаю, как это работает, и я нашел это очень быстро. Что я не понимаю, так это то, что в комментариях к этому ответу сказано, что таким образом все копируется дважды. Но, насколько я понимаю, это происходит только в памяти, а не с диска, поэтому это почти незаметно. Это проблема, что он копирует из буфера в строку в памяти?
Использование istreambuf_iterator
другой ответ Я получил использует istreambuf_iterator. Код выглядит красиво и минимально, но он очень медленный. Я не знаю, почему это происходит. Почему эти итераторы такие медленные?
Использование memcpy ()
Заэтот вопрос Я получил комментарии, что я должен использовать memcpy (), так как это самый быстрый нативный метод. Но как я могу использовать memcpy () со строкой и объектом ifstream? Разве ifstream не должен работать со своей функцией чтения? Почему использование memcpy () разрушает переносимость? Я ищу решение, которое совместимо с VS2010, а также GCC. Почему memcpy () не работает с ними?
+ Любой другой эффективный способ возможен?
Что вы посоветуете, какую оболочку я использую для небольших бинарных файлов размером менее 10 МБ?
(Я не хотел разбивать этот вопрос на части, так как меня больше интересует сравнение между различными способами, как я могу прочитать ifstream в строку)