2010-06-14 3 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; 

한계 부호 INT의 최대 크기 (이라고 주어진 일반적으로 32 비트 OS에서는 2^32-1이고 대부분의 64 비트 OS에서는 2^32-1).

실제로 많은 RAM과 32 비트 int가있는 시스템을 제외하고는 문제가되기 전에 항상 메모리 제한에 도달하게됩니다.

+0

대부분의 시스템에서 메모리 제한에 도달하기 전에 배열 요소를 채우거나 역 참조하는 심각한 성능 문제가 발생할 수 있습니다. – symcbean

+0

@symcbean 나는 그것을 의심한다. 조회 및 추가 작업은 평균 일정 시간이 소요됩니다. 시간이 걸릴 수있는 유일한 것은 해시 테이블의 크기를 조정하는 것이지만 항목의 총 개수를 미리 알 수 있으면 피할 수 있습니다. – Artefacto

+0

@Artefacto, 왜 대부분의 * 64 비트 OS는 부호없는 int에 대해 2^32-1만을 갖고 있습니까? – Pacerier

관련 문제