Как записать большие числа в файл, чтобы процесс не был заморожен или убит ОС? - PullRequest
4 голосов
/ 22 декабря 2011

В программе на C ++ (Linux) мне нужно записать в файл несколько чисел (целые числа, одно число в строке), и размер может быть очень большим (в настоящее время 25 ГБ).

Числа равны 1, -1 или 0, которые используются для записи соединений узла и дуги в большом графике.

все выходные данные записываются в файл (.txt) с помощью std :: ofstream << ... </p>

Архитектура кода печати:

for  loop1 (node size)
    for  loop2  (arc size)
        filename << .......

ЕслиРазмер вывода небольшой, он работает хорошо.

Но, когда размер вывода велик, терминал оболочки, на котором выполняется программирование, зависает.

Но процесс все еще выполняется и после долгого времени (часов) он уничтожается ОС.

Нет ошибок, предупреждений, появляются ошибки сегментации.

Каковы возможные причины?

Я пытался найти его в Интернете, но не нашел то, что мне нужно.

Спасибо

Это вывод ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 399360
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 399360
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

в верхней команде: он использовал <200 МБ.</p>

1 Ответ

3 голосов
/ 22 декабря 2011

Возможно, что ваша программа имеет утечку памяти (вы сказали, что ваша программа была большой и сложной), что будет постоянно запрашивать больше памяти у ОС по мере выполнения вашей программы.Это может объяснить, почему ваша машина перестает отвечать на запросы (из-за нагрузки на память), а также объяснить, почему ОС прерывает вашу программу, когда ей не хватает памяти.

Попробуйте посмотреть, как ваша программа запускается с top или что-то.Если размер резидента увеличивается без ограничений, это может быть вашей проблемой.С меньшим набором данных вы, вероятно, не заметите проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...