2010-06-14 22 views

उत्तर

8

केवल एक चीज मैं php के संदर्भ में सामना करना पड़ा है इस bytes.com/forum से:

मुझे नहीं लगता कि कितना बड़ा एक सरणी हो सकता है पर एक सीमा होती है, लेकिन पर एक सीमा होती है आपकी स्क्रिप्ट कितनी मेमोरी का उपयोग कर सकती है।

php.ini कॉन्फ़िगरेशन फ़ाइल में 'memory_limit' निर्देशक आपकी स्क्रिप्ट का उपभोग कर सकते हैं स्मृति की अधिकतम मात्रा रखती है। इसे बदलने का प्रयास करें, देखें कि क्या इससे मदद मिलती है।

41

हां, अधिकतम तत्वों की एक सीमा है। हैश तालिका संरचना (सरणियों मूल रूप से कर रहे हैं एक हैश मेज के चारों ओर रैपर) इस तरह परिभाषित किया गया है (पीएचपी 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-बिट ओएस पर और अधिकतम 64-बिट ओएस पर 2^32-1)।

प्रैक्टिस में, हालांकि, बहुत सी रैम और 32-बिट इन्ट्स वाली मशीनों को छोड़कर, आप एक समस्या बनने से पहले हमेशा स्मृति सीमा को दबाएंगे।

+0

आपको शायद अधिकांश सिस्टम पर मेमोरी सीमा को हिट करने से पहले आपको गंभीर प्रदर्शन समस्याओं को पॉप्युलेट करने और सरणी तत्वों को डिफ्रेंस करने में मिल जाएगा। – symcbean

+0

@ सिमकबीन मुझे शक है। लुकअप और परिवर्धन औसत निरंतर समय लेते हैं। एकमात्र चीज जो समय ले सकती है, हैश टेबल का आकार बदल रही है, लेकिन अगर वस्तुओं की कुल संख्या अग्रिम में जानी जा सकती है तो इससे बचा जा सकता है। – Artefacto

+0

@Atetefacto, आप क्यों कहते हैं * अधिकांश * 64-बिट ओएस में हस्ताक्षर किए गए int के लिए केवल 2^32-1 है? "आईएलपी 64" के लिए – Pacerier

संबंधित मुद्दे