Ksh无法在linux上分配内存
我有两个大的字符串数组(每个都有90000个元素)。Ksh无法在linux上分配内存,linux,ksh,Linux,Ksh,我有两个大的字符串数组(每个都有90000个元素)。 我使用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_driv
我使用
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
在这部分代码之后,我尝试归档一些文件,但得到
无法分叉[无法分配内存]
这样的问题有解决办法吗 附言。 kshVersion=版本AJM 93t+2010-02-02
为了计算出使用了多少ram内存,我执行了
free-m
我假设在Ksh中使用它有特定的原因?试着对这样的表需要多少内存做一些近似,并与RAM和交换量进行比较。我打赌它不是一个特定的程序,而是limits.conf或sysctl.conf中的一些进程内存/交换使用限制
您还可以尝试按概念将数据拆分为一些组,如名称的第一个字母或其他内容,以减少所需的内存量。您的代码可能远未达到最佳状态,最好先收集您需要的所有信息,然后再使用它,而不是像您正在尝试的那样在嵌套循环中重复整个过程。您是否考虑使用其他编程语言(例如,OcAML、Python、C)来对程序进行编码?我猜在Linux上,ash
或
zsh`比ksh
更常见。排序两个列表,写入文件,使用diff
。新用户提示:如果你觉得有用或至少有用,你可能想投票/接受一些答案。编辑你的帖子,将print--kshVersion=${.sh.version}
的输出包括在内。另外,您如何知道您正在为此使用~8000MB的RAM?把这个也添加到你的帖子中@j-16SDiZ的解决方案更为传统,应该有效,但你所做的似乎应该有效(我没有尝试模拟你的问题)。祝你好运。