我有两个很大的字符串数组(每个都有〜90000个elems)。
我用set -A
命令创建它们。
而且我需要找出第二个数组中哪个字符串不相等。
我的代码:
for i in {0..${#hard_drive_files[*]}}; do
has_reference=false
for j in {0..${#files_in_db[*]}}; do
if [[ ${files_in_db[j]} == ${hard_drive_files[i]} ]]; then
has_reference=true
break
fi
done
if [[ $has_reference == false ]]; then
echo "${hard_drive_files[i]}"
fi
done
这部分代码“占用”了过多的内存。在执行结束时,已用内存的值为〜80000 MB
在这部分代码之后,我尝试归档一些文件,但得到
cannot fork [Cannot allocate memory]
有解决这个问题的办法吗?
附言
kshVersion =版本AJM 93t + 2010-02-02
要找出使用了多少内存,我执行
free -m
最佳答案
我认为有特定的理由在Ksh中这样做吗?尝试近似估算该表需要多少内存,并将其与RAM和SWAP的数量进行比较。我敢打赌这不是专门的程序,但是limits.conf或sysctl.conf中有一些每个进程的内存/交换使用限制。
您还可以尝试按概念将数据分成几组,例如名字的首字母或其他字母,以减少所需的内存量。您的代码可能远非最佳,最好先收集所需的所有信息,然后再使用它们,而不是像您想做的那样在嵌套循环中重复整个过程。