【问题标题】:Regular variable size (kBit) limit [duplicate]常规可变大小(kBit)限制[重复]
【发布时间】:2020-06-21 04:29:34
【问题描述】:

虽然在论坛中得到了很好的处理, 问题通常集中在 linux box 上的环境变量上。

我想知道是否有任何规范,明确确定常规变量 (a='Hello') 可以容纳的最大(限制)大小。

大小仅受内存限制吗?

对常规变量是否有固定/灵活的限制?

在奇怪的事情开始发生之前,我可以加载到变量 (a=$(cat bigfile.txt)) 中的最大大小是多少?

我想知道限制在哪里,这样我就可以决定使用变量将文本文件加载到其中是否是个好主意。 (以及在限制范围内仍然感觉有多大)以及在达到限制时系统是否给出明确的错误。

【问题讨论】:

  • @kvantour 这个问题是关于常规变量,而不是环境变量。
  • 这是一样的

标签: linux shell


【解决方案1】:

我在 1GB RAM 的机器上进行的实验显示了有趣的结果。我使用的脚本是:

TEMPVAR=A
for i in {1..1000};
        do
        TEMPVAR=${TEMPVAR}$TEMPVAR;
        a=$(echo 2^$i+1|bc)
        b=$(echo $TEMPVAR|wc -c)
        if [ $a -ne $b ]
        then echo KO - $a, $b
        else echo $a
        fi
done

并得到这些结果:

3
5
<snip>
134217729
268435457
./z1.1.sh: xmalloc: cannot allocate 1073741825 bytes (0 bytes allocated)
KO - 536870913, 0
./z1.1.sh: xmalloc: cannot allocate 1073741825 bytes (0 bytes allocated)

因此,通常您可以在变量中保存大量信息。 你可以在my personal blog找到更多信息

【讨论】:

  • 感谢您的意见。关于 linux 的可变大小限制(以及它们是如何确定的)是否有任何分类/技术描述,或者只有实验可用,并且没有关于变量在其内容大小方面的行为的定义?我想阅读规范以了解它是如何工作的,而不是盲目地尝试何时崩溃。 (或者:知道它为什么会坏)
  • @user12938074,根据这个答案stackoverflow.com/a/1078125/2908599,环境变量没有定义的限制。但我找到了这个答案:unix.stackexchange.com/a/521377/101265 它给出了不同的值(比第一个答案和我的测试低得多)
  • 谢谢,我还是觉得它主要是围绕环境变量运行的,我想知道简单变量是如何工作的。从您的实验来看,它似乎在达到内存限制时停止。
  • @user12938074,实际上是夸脱内存。尝试分配 512MB 时失败。这是因为我将变量大小加倍的方式。但最后我们在一个变量中讨论 256MB。这是很多:)
  • 这是肯定的,但不同的硬件上的限制可能会有所不同,或者可能是由于某些内核设置,这就是让我保持清醒的原因。 (没有明确定义变量可以容纳的最大大小)。似乎没有明确的定义,例如“变量的大小可以最大为 FREE_MEMORY * 0.5”等。依赖于实验可能会导致随机情况下的错误。
猜你喜欢
  • 2016-03-01
  • 2014-06-12
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2013-04-25
  • 2018-01-19
  • 2021-04-07
相关资源
最近更新 更多