2012-06-11 14 views
7

मैं इस कोड चला रहा हूँ:स्मृति छवि कमी

#include <iostream> 
#include <cstddef> 


int main(int argc, char *argv[]){ 
    int a1=0, a2=0; 
    int a3,a4; 

    int b1=++a1; 
    int b2=a2++; 

    int*p1=&a1; 
    int*p2=&++a1; 

    size_t st; 
    ptrdiff_t pt; 

    int i=0; 
    while(true){ 
     printf("i: %d",i++); 
    } 
    printf("\n\ni now is: %d\n",i); 
    return 0; 
} 

कारण है कि मैं छवि स्मृति में इस तरह के कमी (Fiolet) का पालन करते हैं: enter image description here कथा:

enter image description here मैं इस सामान्य Win32 परियोजना बनाया है, सीएलआर नहीं मैंने कोड बदल दिया, इसलिए मैं देखता हूं कि int अंततः नकारात्मक हो गया है। अब जबकि() है:

int i=0; 
    while(0<++i){ 
     printf("i: %d",i++); 
    } 
    printf("\n\ni now is: %d\n",i); 

यह अजीब बात है: कृपया 30000 पुनरावृत्तियों के बाद क्या खुशी है देखें। हम छवि स्मृति में इन उतार चढ़ाव क्यों देखते हैं? अब मैं देख सकता हूं कि शायद यह वीएमएपी के साथ ही जुड़ा हुआ है, क्योंकि ऐसा होता है जब मैं "लॉन्च & एक नई प्रक्रिया का पता लगाने" चुनता हूं, लेकिन जब "चल रही प्रक्रिया को देखें" और वीएस -2010 से निकाले गए एक्सई को इंगित करने के लिए इंगित करें। यहाँ इस प्रक्रिया के स्क्रीन "का शुभारंभ किया & पता लगाया" है: enter image description here

मैं यह भी कहा स्मृति की भारी पेजिंग, जो छवि में इस गिरावट के (इस पेजिंग लगभग त्वरित और जल्दी से शुरू हो रहा रैम सीमा के साथ मोटे तौर पर शुरू किया था, कि मैं करने के लिए निर्धारित किया है 2GB): enter image description here

तो शायद NET अनुप्रयोगों की स्मृति प्रबंधन के लिए कुछ मुद्दे विषय जगह यहाँ ले जाता है: enter image description here और यहाँ एक चलने वाली प्रक्रिया केवल "देखी" (VS2010 से runned) क्या है? मैं अभी भी अपने पूरक के लिए दो पूरक की सीमा पार करने की प्रतीक्षा कर रहा हूं।

अच्छी तरह से ... मुझे फिर से संपादित करना होगा: यह पता चला है कि जैसा कि पहले सोचा था - घटती स्मृति छवि प्रभाव तब मौजूद है जब प्रक्रिया केवल देखी जाती है (लॉन्च नहीं)। नीचे एक ही प्रक्रिया की तस्वीर से जुड़ा हुआ है 10 मिनट बाद (अब भी नकारात्मक में पूर्णांक मोड़ के लिए इंतज़ार कर): enter image description here

और यहाँ यह है: पर

enter image description here

तो सबसे बड़ा सकारात्मक 2-पूरक मेरी मशीन 2 147 483 647 है और सबसे छोटी नकारात्मक है -2 147 483 648, क्या इस तरह से सत्यापित करने के लिए आसान है:

#include <limits> 
const int min_int = std::numeric_limits<int>::min(); 
const int max_int = std::numeric_limits<int>::max(); 

यह मुझे एक ही परिणाम दे दी है: -2 14 7 483 648 और 2 147 483 647

शुरुआत में जब मैं सबकुछ टिप्पणी करता हूं लेकिन थोड़ी देर() लूप - वही बात होती है: प्रक्रिया 10 मिनट तक चलने के बाद घटती जा रही है, इसलिए यह बेकार नहीं है कोड जो इसका कारण बनता है। पर क्या?

+0

क्या आप बार-बार स्मृति खपत के इस पैटर्न को पुन: उत्पन्न कर सकते हैं? – dirkgently

+1

शायद प्रिंटफ लॉगिंग कुछ ग्राफिक्स स्पेस ले रही है? –

+0

यह कैसे संभव है कि छवि अवरुद्ध हो रही है? @dirkgently, अब तक यह अभी भी चल रहा है क्योंकि मैं देखना चाहता हूं कि आखिरकार अंत में क्या होगा – 4pie0

उत्तर

3

कार्य सेट बड़े पैमाने पर ऑपरेटिंग सिस्टम के नियंत्रण में है। आपका कोड क्या करता है यह केवल एक कारक है जब यह निर्णय लेता है कि आपके कामकाजी सेट को बढ़ाना या ट्रिम करना है या नहीं। अन्य कारकों में शामिल हैं कि आपका आवेदन अग्रभूमि में है या नहीं, यह कितना सक्रिय है, हेप एल्गोरिदम कितना लालची है, अन्य प्रक्रियाओं की मांगों के कारण मेमोरी दबाव कितना मौजूद है आदि। यह डिज़ाइन द्वारा है।

बूंद शायद आपके कामकाजी सेट को ट्रिम करने के लिए विंडोज से संबंधित हैं। चूंकि मूल रूप से लोड किए गए अधिकांश कोड शायद प्रारंभिक रूप से प्रारंभिक थे और लूप में शामिल नहीं थे, इसलिए ओएस के लिए एलआरयू-एल्गोरिदम के आधार पर छवि पृष्ठों को पुनः प्राप्त करना आसान था।

ध्यान दें कि छवि आकार में आवंटित कार्य सेट केवल एकमात्र भाग नहीं है जो छंटनी की गई थी।

+0

हां, ढेर भी छंटनी की गई थी। ढेर क्यों? और उस विशाल पेजिंग का कारण क्या है, जिसने आखिरकार वीएमएपी को लात मार दिया? यह लगभग 10 मिनट, बहुत जल्दी हुआ। – 4pie0

+0

पेजिंग केवल तब मौजूद है जब VMMap के भीतर से प्रक्रिया शुरू की जाती है, जब इसे "चलने की प्रक्रिया देखें" चुनकर – 4pie0

+0

चुनते समय देखा जाता है, जब मैं सब कुछ टिप्पणी करता हूं लेकिन थोड़ी देर होती है() लूप एक ही चीज होती है: प्रक्रिया चलने के बाद छवि घट रही है लगभग 10 मिनट – 4pie0

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