PHP:数组有最大尺寸限制吗?

30

在PHP中,数组有大小限制吗?

2个回答

46

是的,元素的最大数量存在限制。哈希表结构(数组基本上是哈希表的包装器)在PHP 5.3中定义如下:

typedef struct _hashtable {
    uint nTableSize;
    uint nTableMask;
    uint nNumOfElements;
    ulong nNextFreeElement;
    Bucket *pInternalPointer;   /* Used for element traversal */
    Bucket *pListHead;
    Bucket *pListTail;
    Bucket **arBuckets;
    dtor_func_t pDestructor;
    zend_bool persistent;
    unsigned char nApplyCount;
    zend_bool bApplyProtection;
#if ZEND_DEBUG
    int inconsistent;
#endif
} HashTable;

鉴于

typedef unsigned int uint;

限制是无符号整数的最大大小(在32位操作系统和大多数64位操作系统上通常为2^32-1)。

然而,在实践中,除非在具有大量内存和32位整数的计算机上,否则您将始终在达到内存限制之前遇到此问题。


在大多数系统上,在达到内存限制之前,你可能会发现在填充和取消引用数组元素方面遇到严重的性能问题。 - symcbean
我怀疑这一点。查找和添加需要平均常数时间。唯一可能需要时间的是调整哈希表的大小,但如果预先知道项目的总数,就可以避免这种情况。 - Artefacto
1
@Artefacto,为什么你说大多数64位操作系统只有2^32-1的无符号整数? - Pacerier
2
@Pacerier 在谷歌上搜索“ILP64”。 - Artefacto
自从PHP 7.0版本以来,对range()函数的检查将数组大小限制在2^(32-1)-1以内。通过相关问答获得此信息。 - hakre

8

关于php,我找到的唯一信息来自bytes.com/forum:

我认为数组大小没有限制,但是脚本可以使用的内存有限制。

在php.ini配置文件中,'memory_limit'指令控制着脚本可以消耗的最大内存。尝试更改这个值,看看是否有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接