如何在没有进程没有被操作系统冻结或杀死的情况下将大数字写入文件?
问题描述:
在一个C++程序(Linux)中,我需要在文件中写入一些数字(整数,每行一个数字),并且大小可能非常大(目前为25GB)。如何在没有进程没有被操作系统冻结或杀死的情况下将大数字写入文件?
数字为1,-1或0,用于记录大图中节点和弧的连接。
所有的输出是通过的std :: ofstream的< <写入一个文件(.txt)...
打印代码架构是:
for loop1 (node size)
for loop2 (arc size)
filename << .......
如果输出尺寸小,它运作良好。
但是,当输出尺寸很大时,正在运行编程的shell终端将被冻结。
但是这个过程仍然在运行,经过很长时间(小时)后,它被OS所杀。
没有错误,警告,分割失败弹出。
可能的原因是什么?
我试图在网上搜索它,但没有找到我所需要的。
由于
这是的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 MB。
答
您的程序可能存在内存泄漏(您说您的程序很大且很复杂),这会在程序运行时不断地从操作系统请求更多的内存。这可以解释为什么你的机器变得没有响应(由于内存压力负载),也可以解释为什么操作系统在内存不足时终止你的程序。
试着看你的程序运行top
什么的。如果居民人数无限增加,这可能是你的问题。对于较小的数据集,您可能不会注意到问题。
你有最大文件大小的'ulimit'设置吗? – 2011-12-22 00:37:13
发布实际代码可能也有帮助(即你在缓冲吗?)同样,系统日志中应该有一些内容解释内核决定终止进程的原因。检查/ var/log/messages – 2011-12-22 00:38:32
是否考虑划定文件? – 2011-12-22 00:41:22