【发布时间】:2014-05-14 03:42:32
【问题描述】:
虽然,例如,perldata 文档在 Perl 中标量字符串仅受可用内存限制,但我强烈怀疑在现实生活中还会存在一些其他限制。
我正在考虑以下想法:
- 我不确定 Perl 中的字符串是如何实现的——是否有某种字节/字符计数器?如果有,那么它可能被实现为与平台相关的整数(即 32 位或 64 位),因此有效地将字符串限制为
2 ** 31、2 ** 32、2 ** 63或2 ** 64字节. - 如果 Perl 不使用计数器而是使用一些字节来终止字符串(这很奇怪,因为在 Perl 中可以使用像 "foo\0bar" 这样的字符串),那么所有操作都将不可避免地得到随着字符串长度的增加,速度要慢得多。
- Perl 处理字符串的大多数字符串函数,例如length,都返回正常的标量整数,我强烈怀疑它也会是受平台限制的整数。
那么,在现实生活中限制 Perl 字符串长度的其他因素是什么?出于实际目的,什么应该被认为是合适的字符串长度?
【问题讨论】:
-
perl -E '$x = "x" x (2 ** 31); $y = $x x 7;say length $y'为我返回15032385536,但$x x 8段错误。我有 16 GB,ptrsize=8。 -
关于第一点:有多少64位机器有超过2^64字节的内存?