2010-06-14 107 views

回答

8

我參考PHP遇到的唯一的事情是這樣的,從bytes.com/forum

我不認爲這對一個數組可以有多大的限制,但在限制你的腳本可以使用多少內存。

在php.ini配置文件中的「memory_limit的」指令持有的內存最大數量腳本可以消耗。嘗試改變這一點,看看是否有幫助。

41

是的,有對元素的最大數量的限制。哈希表結構(陣列是基本上的包裝了的哈希表)的定義如下(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; 

的限制爲一個unsigned int的最大尺寸(在32位操作系統和大多數64位操作系統上通常爲2^32-1)。

然而在實踐中,除非有很多的RAM和32位整數的機器,你會一直打到內存限制之前,這將成爲一個問題。

+0

您可能會發現,在大多數系統上遇到內存限制之前,您會遇到嚴重的性能問題,這些問題會填充並取消引用數組元素。 – symcbean 2010-06-14 13:21:55

+0

@symcbean我對此表示懷疑。查找和添加需要平均不變的時間。唯一需要花費時間的是調整散列表的大小,但如果事先知道項目的總數,則可以避免這種情況。 – Artefacto 2010-06-14 13:41:28

+0

@Artefacto,你爲什麼說*大多數* 64位操作系統只有2^32-1爲unsigned int? – Pacerier 2013-07-28 19:04:59