我有两个很大的字符串数组(每个都有〜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中有一些每个进程的内存/交换使用限制。

您还可以尝试按概念将数据分成几组,例如名字的首字母或其他字母,以减少所需的内存量。您的代码可能远非最佳,最好先收集所需的所有信息,然后再使用它们,而不是像您想做的那样在嵌套循环中重复整个过程。

09-10 09:43
查看更多