2010-06-14 3 views

Répondre

8

La seule chose que je suis venu à travers en référence à php est de ce bytes.com/forum:

Je ne pense pas qu'il y ait une limite sur la taille d'un tableau peut être, mais il y a une limite combien de mémoire votre script peut utiliser.

La directive 'memory_limit' dans le fichier de configuration php.ini contient la quantité maximale de mémoire que vos scripts peuvent consommer. Essayez de changer cela, voir si cela aide.

41

Oui, le nombre maximal d'éléments est limité. La structure de la table de hachage (tableaux sont enrubanneuse essentiellement autour d'une table de hachage) est définie comme suit (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; 

étant donné que

typedef unsigned int uint; 

la limite est la taille maximale d'un entier non signé (généralement 2^32-1 sur un système d'exploitation 32 bits et sur la plupart des systèmes d'exploitation 64 bits).

En pratique, cependant, sauf sur les machines avec beaucoup de RAM et d'octets 32 bits, vous atteindrez toujours la limite de mémoire avant que cela ne devienne un problème.

+0

Vous rencontrerez probablement de sérieux problèmes de performance en remplissant et en déréférenciant des éléments de tableau avant d'atteindre la limite de mémoire sur la plupart des systèmes. – symcbean

+0

@symcbean J'en doute. Les recherches et les ajouts prennent un temps constant moyen. La seule chose qui peut prendre du temps est de redimensionner la table de hachage, mais cela sera évité si le nombre total d'éléments peut être connu à l'avance. – Artefacto

+0

@Artefacto, pourquoi dites-vous que * la plupart des systèmes d'exploitation 64 bits ont seulement 2^32-1 pour les entiers non signés? – Pacerier