Форум программистов, компьютерный форум CyberForum.ru

Чтение полного файла в память или по кускам? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 15:15     Чтение полного файла в память или по кускам? #1
Здравствуйте.
Возник такой вопрос. Как рациональнее делать в плане выигрыша процессорного времени и занятия минимального количества места?
Есть файл. С его данными надо проделать некие операции и создать новый файл того же типа, но с измененными данными. Так вот, что лучше, прочитать весь файл в буфер и там его обрабатывать или обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 15:15     Чтение полного файла в память или по кускам?
Посмотрите здесь:

C++ Разобрать строку по кускам
C++ #include ,указание файла без полного пути.
Чтение файла TIFF в память C++
Чтение из файла. Повторное чтение файла C++
C++ Из полного пути к файлу выделить только имя файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
08.03.2011, 15:25     Чтение полного файла в память или по кускам? #2
Цитата Сообщение от Ortistx Посмотреть сообщение
прочитать весь файл в буфер и там его обрабатывать
А если файл будет размером несколько гигабайт?
Цитата Сообщение от Ortistx Посмотреть сообщение
обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?
Побайтно обрабатывать тоже не лучший вариант.
Лучше всего использовать блочное чтение примерно по 512 байт или используя константу BUFSIZ, которая определена в stdio.h. А вообще как мне кажется максимальная скорость будет достигнута при размере блока равному размеру сектора диска или размеру одного кластера.
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 15:31  [ТС]     Чтение полного файла в память или по кускам? #3
fasked, тип файла будет jpeg, поэтому максимум - это десятки мегабайт для моих целей.

Т.е. в любом случае, блочное чтение быстрее будет, чем обработка в памяти?

А что за константа BUFSIZ?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 15:37     Чтение полного файла в память или по кускам? #4
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
08.03.2011, 15:43     Чтение полного файла в память или по кускам? #5
Цитата Сообщение от Ortistx Посмотреть сообщение
А что за константа BUFSIZ?
Как мне кажется это константа определяет стандартный размер буфера для потока. Буфер можно изменить функцией setvbuf. Я могу ошибаться конечно.
Цитата Сообщение от alex_x_x Посмотреть сообщение
проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
+1, я подразумевал только средства стандартных библиотек языка.
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 16:00  [ТС]     Чтение полного файла в память или по кускам? #6
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
а можно расшифровать эту фразу? Т.е. имеется ввиду все-таки самый быстрый способ все в память загружать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 16:28     Чтение полного файла в память или по кускам?
Еще ссылки по теме:

Чтение из текстового файла одного или три значения C++
C++ Сравнение переменных или чтение с файла?
Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
08.03.2011, 16:28     Чтение полного файла в память или по кускам? #7
Имеются в виду файлы, отображаемые в память

Managing Memory-Mapped Files
http://msdn.microsoft.com/en-us/library/ms810613.aspx

Добавлено через 1 минуту
А вообще при таком размере - десятки мегабайт можно сильно не напрягаться
Читаем весь файл целиком в память одним read()

Memory-mapped files начинают помогать когда размер файлов несколько больше чем десятки мегабайт
Yandex
Объявления
08.03.2011, 16:28     Чтение полного файла в память или по кускам?
Ответ Создать тему
Опции темы

Текущее время: 13:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru