2010-06-14 24 views

Respuesta

8

La única cosa que he encontrado en referencia a php es esto desde bytes.com/forum:

No creo que hay un límite de lo grande que puede ser un array, pero hay un límite en cuánta memoria puede usar su script

La directiva 'memory_limit' en el archivo de configuración php.ini contiene la cantidad máxima de memoria que pueden consumir los scripts. Intenta cambiar esto, mira si eso ayuda.

41

Sí, hay un límite en la cantidad máxima de elementos. La estructura de tabla hash (arrays son básicamente envolturas alrededor de una tabla hash) se define como este (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; 

dado que

typedef unsigned int uint; 

el límite es el tamaño máximo de un unsigned int (típicamente 2^32-1 en un sistema operativo de 32 bits y en la mayoría de los sistemas operativos de 64 bits).

En la práctica, sin embargo, excepto en máquinas con mucha memoria RAM y entradas de 32 bits, siempre alcanzará el límite de memoria antes de que esto se convierta en un problema.

+0

Probablemente encontrará que se encuentra con serios problemas de rendimiento rellenando y desreferenciando elementos de la matriz antes de alcanzar el límite de memoria en la mayoría de los sistemas. – symcbean

+0

@symcbean Lo dudo. Las búsquedas y adiciones toman un tiempo promedio constante. Lo único que puede llevar tiempo es cambiar el tamaño de la tabla hash, pero eso se evitará si se conoce el número total de elementos por adelantado. – Artefacto

+0

@Artefacto, ¿por qué dices * la mayoría * de 64 bits del sistema operativo tiene solo 2^32-1 para unsigned int? – Pacerier