दिलचस्प पोस्ट
सभी variadic टेम्पलेट तर्क के लिए लक्षण की जाँच करें जावा – चार, एक्स रूपांतरण GUID टक्कर संभव हैं? <Ui: repeat> के भीतर तत्व की सशर्त रेंडरिंग निर्दिष्ट करें? <C: if> काम करने के लिए प्रतीत नहीं होता है MVC 4 वेब एपीआई में Json.NET के लिए कस्टम JsonSerializer सेटिंग्स सेट करने के लिए कैसे करें? इन-ऐप खरीद "सबमिट करने के लिए तैयार", लेकिन मुझे इसे सबमिट नहीं करने देंगे कोको त्रुटि 3840 JSON का उपयोग कर (आईओएस) विंडोज़ कमांड लाइन पर बैच फाइल में मापदंडों का उपयोग करना CakePHP में base_url कोको और उद्देश्य-सी के साथ संदर्भ गणना को समझना स्विफ्ट – NSViewController से keydown कब्जा एक TLD संभवतः कब तक हो सकता है? jaxb (unmarshal) का उपयोग करके जावा ऑब्जेक्ट को बदलना MATLAB में वर्तमान एम-फाईल का स्थान ढूंढें फ़ायरवॉल के पीछे HTTPS पर GitHub तक पहुंचने का प्रयास करते हुए SSL प्रमाणपत्र अस्वीकार कर दिया गया

64 बिट विंडो पर पायथन 32-बिट स्मृति सीमाएं

मुझे एक स्मृति मुद्दे मिल रहा है जो मुझे समझ में नहीं आ रहा है।

मैं 8 जीबी मेमोरी के साथ विंडोज 7 64 बिट मशीन पर हूं और एक 32 बिट अजगर कार्यक्रम चला रहा हूं।

कार्यक्रम 5,118 ज़िप किए गए numpy files (npz) पढ़ता है। विंडोज रिपोर्ट करती है कि फाइल डिस्क पर 1.98 जीबी तक ले जाती है

प्रत्येक एनपीज़ फ़ाइल में डेटा के दो टुकड़े होते हैं: 'एआरआइडी' प्रकार एनपी.फ्लोएट 32 है और 'एआरआरआई' प्रकार एनपी.यूआईटी 8 की है

अजगर स्क्रिप्ट पढ़ता है कि प्रत्येक फ़ाइल उनके डेटा को दो सूचियों में जोड़ती है और फिर फ़ाइल को बंद कर देती है।

लगभग 4284/5118 फाइल में मेमोरीएक्साशन फेंकता है

हालांकि, कार्य प्रबंधक कहते हैं कि python.exe * 32 का मेमोरी उपयोग होता है जब त्रुटि होती है 1,854,848K ~ = 1.8 जीबी मेरी 8 जीबी की सीमा से कम या 32bit कार्यक्रम की 4 जीबी सीमा की अपेक्षा

कार्यक्रम में मैं स्मृति त्रुटि को पकड़ता हूं और यह रिपोर्ट करता है: प्रत्येक सूची में लंबाई 4285 है। पहली सूची में कुल 1,928,588,480 फ़्लोट 32 की ~ 22 9.9 एमबी डेटा शामिल है। दूसरी सूची में 12,342,966,272 यूआईटी 8 के ~ = 1,471.3 एमबी डेटा शामिल हैं

तो, सब कुछ बाहर की जाँच हो रहा है। उस भाग को छोड़कर जहां मुझे मेमोरी गलती मिलती है मैं पूरी तरह से और अधिक स्मृति है, और जिस फ़ाइल को क्रैश करता है वह ~ 800 केबी है, इसलिए इसकी एक बड़ी फाइल पढ़ने पर असफल नहीं है

साथ ही, फ़ाइल दूषित नहीं है मैं इसे ठीक से पढ़ सकता हूँ, अगर मैं पहले से सभी स्मृति का उपयोग नहीं करता

चीजों को और अधिक भ्रमित करने के लिए, यह सब मेरी लिनक्स मशीन पर ठीक काम करने लगता है (हालांकि इसमें मेरी विंडोज मशीन पर 8 जीबी के विरोध में 16 जीबी मेमोरी है), लेकिन फिर भी, यह मशीन की रैम नहीं है इस मुद्दे के कारण

पायथन क्यों एक स्मृति त्रुटि फेंक रहा है, जब मुझे उम्मीद है कि यह एक और 2GB डेटा आवंटित करने में सक्षम होना चाहिए?

Solutions Collecting From Web of "64 बिट विंडो पर पायथन 32-बिट स्मृति सीमाएं"

मुझे नहीं पता कि आपको क्यों लगता है कि आपकी प्रक्रिया 4 जीबी तक पहुंचने में सक्षम होनी चाहिए। MSDN में विंडोज विज्ञप्ति के लिए मेमोरी सीमा के अनुसार, 64-बिट विंडोज 7 पर, एक 32-बिट प्रोसेसिंग सिस्टम को 2 जीबी मिलता है।

तो, क्या इस के आस पास एक रास्ता है?

ठीक है, आप 32-बिट पायथन का एक कस्टम बिल्ड बना सकते हैं जो numpy ध्वज का उपयोग करता है, और numpy और अपने सभी अन्य एक्सटेंशन मॉड्यूल को पुनर्निर्माण numpy । मैं वादा नहीं कर सकता कि सभी प्रासंगिक कोड वास्तव में बड़े-पता-अवगत ध्वज के साथ चलने के लिए सुरक्षित है; यह एक अच्छा मौका है, लेकिन जब तक कि किसी ने पहले ही ऐसा किया और इसका परीक्षण न किया हो, "अच्छा मौका" सबसे अच्छा किसी को भी पता चलने की संभावना है।

या, अधिक स्पष्ट रूप से, बस इसके बजाय 64-बिट पायथन का उपयोग करें।


भौतिक RAM की मात्रा पूरी तरह अप्रासंगिक है। आपको लगता है कि आपके पास 8 जीबी रैम के साथ "8 जीबी सीमा" है, लेकिन ऐसा नहीं है कि यह कैसे काम करता है। आपका सिस्टम आपकी सभी रैम को लेता है और जो भी स्वैप स्पेस की आवश्यकता है और इसे एप्लिकेशन के बीच विभाजित करता है; एक ऐप को 8 जीबी मशीन पर भी स्मृति त्रुटि के बिना 20 जीबी वर्चुअल मेमोरी प्राप्त करने में सक्षम हो सकता है और इस बीच, एक 32-बिट ऐप में 4 जीबी से अधिक तक पहुंचने का कोई तरीका नहीं है, और ओएस उस पते के कुछ स्थान का उपयोग करेगा (डिफ़ॉल्ट रूप से विंडोज़ का आधा), ताकि आप केवल 8 जीबी मशीन पर ही 2 जीबी पा सकें वह कुछ और नहीं चल रहा है (ऐसा नहीं है कि किसी आधुनिक ओएस पर "कुछ भी नहीं चलना" संभव है, लेकिन आप जानते हैं कि मेरा क्या मतलब है।)


तो, यह आपके लिनक्स बॉक्स पर काम क्यों करता है?

क्योंकि आपका लिनक्स बॉक्स 32-बिट प्रक्रियाओं को 3.5 जीबी वर्चुअल पता स्थान, या 3.99 जीबी देने के लिए कॉन्फ़िगर किया गया है, या … ठीक है, मैं आपको सटीक नंबर नहीं बता सकता, लेकिन कई वर्षों से मैंने देखा है कि हर डिस्टोर कॉन्फ़िगर किया गया है कम से कम 3.25 जीबी के लिए


* यह भी ध्यान रखें कि आपको अपने डेटा के लिए यह पूर्ण 2 जीबी भी नहीं मिलता है; आपका कार्यक्रम ओएस और इसके चालकों में से अधिकांश आपके कोड के लिए सुलभ पहुंचते हैं, दूसरे आधे में बैठते हैं, लेकिन कुछ बिट्स आपके आधे हिस्से में बैठते हैं, साथ ही हर लोड किए गए डीएलएल और उनकी ज़रूरत की किसी भी जगह और अन्य कई चीजें। यह बहुत ज्यादा नहीं जोड़ता है, लेकिन यह शून्य नहीं है।