2012-03-27 15 views
7

निम्नलिखित सी कार्यक्रम पर विचार करें की स्मृति पदचिह्न कैसे कम कर सकते हैं, 'pause.c':मैं एक न्यूनतम लिनक्स प्रक्रिया

void main() { pause(); } 

इस आदेश 'का उपयोग कर 64 लिनक्स 3.0.0-16-सामान्य पर इस संकलन gcc -Os pause.c -o रोकें 'आकार ~ 8 केबी के निष्पादन योग्य बनाता है। जब मैं इस निष्पादन योग्य को चलाता हूं और 'pmap -d pID' का उपयोग करके अपनी सटीक स्मृति पदचिह्न की जांच करता हूं, तो यह मुझे दिखाता है कि प्रक्रिया में आवंटित निजी स्मृति 1 9 2 केबी है (यह आमतौर पर 128 केबी और 1 9 2 केबी के बीच अलग-अलग प्रणालियों में भिन्न होती है)।

वालग्रिंड और मासफ का उपयोग कर प्रक्रिया की जांच करना किसी भी स्मृति आवंटन घटनाओं का पता लगाने में विफल रहता है। मुझे संदेह था कि 1 9 2 केबी आंकड़ा सटीक था, लेकिन मैंने पाया कि 'रोक' प्रक्रिया के 5 उदाहरण शुरू करने से लगभग 1 एमबी सिस्टम मेमोरी का उपभोग हुआ।

मुझे इस स्मृति की उत्पत्ति को समझाने के लिए नुकसान हुआ है, क्या कोई इस बात को लेकर कुछ अंतर्दृष्टि प्रदान कर सकता है कि यह स्मृति आवंटित क्यों की जा रही है और किसी भी संभावित क्रिया को कम कर सकता है ?, चीयर्स।

+0

ELF निष्पादन की जाँच करके प्रारंभ; आपको वहां बहुत सी चीजें मिलेंगी (डेटा/कोड अनुभाग, डीबग, टिप्पणियां, आदि)। यह भी ध्यान रखें कि आपका प्रोग्राम कम से कम libc के खिलाफ जुड़ा हुआ है; यह वहां बहुत जगह है। –

+0

ठीक है, बाइनरी का मूल आकार 8 केबी है, और pmap उपयोगिता लिंकिंग ओवरहेड को ध्यान में रखती है, 1 9 2 केबी आंकड़ा पूरी तरह से कार्यक्रम से ही लिया जाता है, यह लिंकिंग ओवरहेड पर विचार होने पर 4032 केबी तक कूद जाता है लेकिन यह साझा स्मृति है और चिंता नहीं –

+2

libc से छुटकारा पाने का प्रयास करें: शून्य _start() { \t जबकि (1) {} } और gcc -nostdlib pause.c के साथ संकलित करें। इससे स्मृति उपयोग कम हो जाएगा। – strkol

उत्तर

10

ढेर सीमा को कम करना स्मृति पदचिह्न कम करेगा:

ulimit -s 8 
+0

सेट्रलिमिट एक ही काम करेगा प्रोग्रामिंग –

+1

बिल्कुल वही नहीं! Setrlimit वर्तमान प्रक्रिया के लिए सीमा निर्धारित करेगा, लेकिन ढेर पहले ही आवंटित किया जाएगा ... इसलिए माता-पिता प्रक्रिया को सेट्रलिमिट (जो उलिमिट करता है) को कॉल करना चाहिए और फिर नई प्रक्रिया को छोटे प्रीलाक्टेड स्टैक के साथ स्पॉन करें। यदि मैं गलत हूं तो मुझे सही करों। – strkol

+0

आह, अच्छा बिंदु: डी –

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