|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 5
|
||||||
Нехватка памяти при чтении/записи файлов04.12.2015, 14:31. Показов 2272. Ответов 9
Метки нет (Все метки)
Всем привет!
Возникла проблема при работе программы, которая должна открывать текстовый файл, читать его, кодировать и записывать в новый txt. Файлы очень большие (не менее 1ГБ текста). Все работает, но ест оперативную память (а требуется работа не очень слабеньких компах). Не могу понять что не так. Как я понимаю, чтение и запись не должны осуществлять хранение всего файла в память. Очень нужна помощь.
0
|
||||||
| 04.12.2015, 14:31 | |
|
Ответы с готовыми решениями:
9
Нехватка памяти при создании динамических объектов |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 04.12.2015, 14:37 | |
|
И в чём нехватка памяти? Программа с такой ошибкой завершается?
Сколько памяти используется, если файл 1Гб?
0
|
|
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 5
|
|
| 04.12.2015, 14:43 [ТС] | |
|
Маленькие файлы работают нормально. А вот большие съедают всю память и программа падает с ощибкой нехватки памяти.
Памяти свободной должно быть мало, ну порядка 1 Гб. А требует программа при работе примерно в два раза больше размера исходного текстового файла Спасибо за ответ!
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 04.12.2015, 15:06 | |
|
Опиши словами, как обрабатывается текст. Если выполнится 56-я строка, то 60-я уйдёт неизвестно куда.
0
|
|
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 5
|
|
| 04.12.2015, 15:18 [ТС] | |
|
После открытия файла пока не достигнут конец файла считывается строка (набор информации, разделенной ; ).
Далее на 54 строке проверяется, что это не шум и не пустая строка (по хорошему таких строк не должно быть и стр 56 не выполняется). Далее на 60 стр считывается информация до первой ; и записыввается в новую переменную string_to_encode. Остаток строки записывается еще в одну переменную not_coded_data. Далее на стр 74 идет кодировка, если строка не пустая Дальше запись в файл и закрытие. Пробовала сбрасывать буфер записи в файл каждые 100 строк, но ничего не поменялось.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|||||||||||
| 04.12.2015, 16:12 | |||||||||||
Сообщение было отмечено need_some_help как решение
Решение
sha1() принимает обычную строку, а возвращает string? Так попробуй:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 5
|
|
| 04.12.2015, 22:40 [ТС] | |
|
Спасибо!
Как это не плачевно, но корень зла оказался как раз в sha1(). Это не моя прога, так что и в голову не приходило ее проверить. Я не про, так что в чужой код , увы, верю без задних мыслей.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 04.12.2015, 22:44 | |
|
Так зачем там столько лишнего-то?
0
|
|
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 04.12.2015, 22:55 | |
|
не совсем понятно разобрались тут или нет. если нехватка памяти связана с тем что хеш нужно считать для львинной доли данных большого файла - то в том варианте функции, которая у вас проблема не решится. если функия на вход хочет строку, то надо этой функции отдавать всю строку. т.е. читать этот файл в память. однако, такие штуки как правило имеют стримоподобные аналоги. если образно, то создается некий объект ему данные отдаются кусками. когда куски закончились объекту говорят что мол мы закончили. вот теперь отдавай хеш всех тех кусков, которые мы тебе скармливали.
0
|
|
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 5
|
|
| 05.12.2015, 16:04 [ТС] | |
|
Спасибо, разобрались.
Все оказалось сильно проще. В чужом коде был один не закрытый malloc, который все и ел. Закрали его, все теперь работает на любых файлах.
0
|
|
| 05.12.2015, 16:04 | |
|
Помогаю со студенческими работами здесь
10
Абракадабра при записи в файл и при чтении из него кириллицы Утечка памяти при первом чтении из файла
Ошибки при записи и чтении из файла Ошибка при чтении/записи из бинарного файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|