पहिल C++ (m)आवंटन हमेशा 72 KB किएक होइत अछि ?
टिप्पणी
Mewayz Team
Editorial Team
अहाँक पहिल C++ आवंटनक पाछूक रहस्य
अहाँ एकटा सरल C++ प्रोग्राम लिखैत छी। एकटा नव इंट। चारि बाइट। अहाँ strace या अपन पसंदीदा मेमोरी प्रोफाइलर केँ फायर अप करैत छी, आओर ओतहि ई अछि — अहाँक प्रक्रिया एखनहि ऑपरेटिंग सिस्टम सँ मोटा-मोटी 72 केबी केर अनुरोध केने अछि. 4 बाइट नहि। 64 बाइट नहि। एकटा पूरा 72 केबी। अगर अहां कहियो ओहि नंबर पर एकटक तकैत रहलहुं अछि आओर सोचने छी जे अहां के टूलिंग अहां सं झूठ बाजि रहल अछि कि नहि त अहां असगर नहि छी. ई विचित्र प्रतीत होय वाला व्यवहार C++ डेवलपरऽ के बीच सबसें बेसी पूछलऽ जाय वाला सवालऽ म॑ स॑ एक छै जे पहिलऽ बार मेमोरी इंटरनल म॑ खुदाई करै छै, आरू एकरऽ जवाब हमरा सब क॑ वू परतऽ के माध्यम स॑ एगो आकर्षक यात्रा प॑ ले जाय छै जे आपकऽ कोड आरू वास्तविक हार्डवेयर के बीच बैठै छै.
जखन अहाँ नव
पर फोन करैत छी तखन की होइत अछि72 केबी कें आंकड़ा कें समझय कें लेल, अहां कें पूरा आवंटन श्रृंखला कें ट्रेस करय कें जरूरत छै. जखन अहाँक C++ कोड new int केँ निष्पादित करैत अछि, तखन कंपाइलर ओकरा ऑपरेटर new केँ कॉल मे अनुवाद करैत अछि, जे अधिकांश लिनक्स सिस्टम पर glibc सँ malloc केँ डेलिगेट करैत अछि. मुदा malloc सीधा कर्नेल सँ 4 बाइट मेमोरी नहि पूछैत अछि. कर्नेल पन्नाक मे संचालित होयत छै — आमतौर पर x86_64 पर 4 केबी — आ एकटा सिस्टम कॉल कें लागत एकटा सरल मेमोरी पहुंच कें सापेक्ष बहुत पैघ छै. हर व्यक्तिगत आवंटन के लेल brk() या mmap() के कॉल करब कोनो गैर-तुच्छ प्रोग्राम के ठप क' देत.
एकर बजाय, glibc केरऽ मेमोरी आवंटक — एक कार्यान्वयन जेकरा ptmalloc2 कहलऽ जाय छै, जे खुद डग ली केरऽ क्लासिक dlmalloc स॑ उतरलऽ छै — एक बिचौलिया के रूप म॑ काम करै छै । ई कर्नेल स॑ मेमोरी केरऽ बड़ऽ ब्लॉक क॑ अपफ्रंट के अनुरोध करै छै, ओकरा बाद ओकरा छोटऽ-छोटऽ टुकड़ा म॑ उकेरै छै जैसनऽ कि आपकऽ प्रोग्राम क॑ जरूरत होय छै । इ मौलिक कारण छै की अहां कें पहिल 4-बाइट आवंटन ऑपरेटिंग सिस्टम कें लेल बहुत पैघ अनुरोध कें ट्रिगर करएयत छै. आवंटनकर्ता बेकार नहि भ रहल अछि। ई रणनीतिक भ' रहल अछि।
72 केबी के विच्छेदन: बाइट कतय जाइत अछि
प्रारंभिक आवंटन ओवरहेड कई अलग-अलग घटक सं आबै छै जेकरा रनटाइम कें आरंभ करनाय आवश्यक छै, तखनहि ओ अहां कें उपयोगी मेमोरी कें एकटा बाइट कें सेहो सौंप सकय. प्रत्येक घटक कें बुझला सं पता चलय छै कि संख्या जतय उतरय छै ओतय किएक उतरय छै.
पहिने, glibc कें malloc मुख्य क्षेत्र कें आरंभ करयत छै — प्राथमिक बहीखाता संरचना जे मुख्य थ्रेड पर सबटा आवंटन कें ट्रैक करयत छै. इ क्षेत्र मे हीप, फ्री-लिस्ट पॉइंटर्स, आ विभिन्न आवंटन आकारक कें लेल बिन संरचना कें लेल मेटाडाटा शामिल छै. आवंटक sbrk() कें माध्यम सं प्रोग्राम ब्रेक कें विस्तार करयत छै, आ प्रारंभिक विस्तार M_TOP_PAD नामक एकटा आंतरिक पैरामीटर कें द्वारा नियंत्रित कैल जायत छै, जे डिफ़ॉल्ट रूप सं 128 केबी पैडिंग कें लेल होयत छै. लेकिन, वास्तविक प्रारंभिक अनुरोध क॑ पन्ना संरेखण आरू मौजूदा ब्रेक स्थिति लेली समायोजित करलऽ जाय छै, जेकरऽ परिणामस्वरूप अक्सर एगो छोटऽ पहिलऽ अनुरोध होय छै — आमतौर प॑ ताजा शुरू करलऽ गेलऽ प्रक्रिया प॑ वू 72 केबी केरऽ आंकड़ा के पास लैंडिंग होय जाय छै.
दोसर, glibc 2.26 कें बाद सं, आवंटक पहिल उपयोग पर एकटा थ्रेड-स्थानीय कैश (tcache) कें आरंभ करयत छै. tcache मे 64 बिन (एक प्रति छोट-आवंटन आकार वर्ग) होयत छै, जे प्रत्येक 7 कैश कैल गेल चंक्स कें रखय मे सक्षम छै. tcache_perthread_struct स्वयं लगभग 1 KB खपत करैत अछि, मुदा एकरा आरंभ करबाक क्रिया व्यापक अखाड़ा सेटअप केँ ट्रिगर करैत अछि. तेसर, C++ रनटाइम पहिने सँ अहाँक main() केँ रन सँ पहिने आवंटन कएने अछि — स्थिर कंस्ट्रक्टर, std::cout आओर मित्रक लेल iostream बफर आरंभीकरण, आओर लोकेल सेटअप सभ ओहि प्रारंभिक ढेर पदचिह्न मे योगदान दैत अछि.
एरिना सिस्टम आ पूर्व आवंटन स्मार्ट किएक अछि
स्मृति केरऽ एगो पर्याप्त हिस्सा क॑ टुकड़ा-टुकड़ा म॑ अनुरोध करै के बजाय पूर्व-आवंटित करै के फैसला कार्यान्वयन केरऽ दुर्घटना नै छै । ई एकटा जानबूझ क॑ इंजीनियरिंग ट्रेडऑफ छै जेकरऽ जड़ दशकऽ के सिस्टम प्रोग्रामिंग अनुभव म॑ छै । brk() या mmap() कें हर कॉल मे उपयोगकर्ता स्थान सं कर्नेल स्थान मे संदर्भ स्विच, प्रक्रिया कें वर्चुअल मेमोरी मैपिंग कें संशोधन, आ संभावित पृष्ठ तालिका अपडेट शामिल छै. आधुनिक हार्डवेयर पर, एकटा सिस्टम कॉल कें कीमत मोटा-मोटी 100-200 नैनोसेकंड होयत छै — अलगाव मे तुच्छ, पैमाना पर विनाशकारी.
एकटा प्रोग्राम पर विचार करू जे आरंभीकरण क दौरान 10,000 छोट आवंटन करैत अछि. बिना पूर्व आवंटन के एकर मतलब होयत जे 10,000 सिस्टम कॉल होयत, जाहि मे लगभग 1-2 मिलीसेकंड के शुद्ध ओवरहेड लागत. एकटा एरिना आधारित आवंटक कें साथ, पहिल आवंटन एकटा सिस्टम कॉल कें ट्रिगर करयत छै, आ बाद कें 9,999 आवंटन कें पूरा तरह सं पॉइंटर अंकगणित आ लिंक-लिस्ट ऑपरेशनक कें माध्यम सं उपयोगकर्ता स्थान मे सेवा देल जायत छै — प्रत्येक मे मोटा-मोटी 10-50 नैनोसेकंड लगयत छै. गणित निर्विवाद अछि : पूर्व-आवंटन परिमाणक क्रमसँ जीतैत अछि ।
<ब्लॉककोट>अहाँ अपन पहिल आवंटन पर जे 72 केबी देखैत छी से बेकार मेमोरी नहि अछि — ई एकटा प्रदर्शन निवेश अछि. आवंटक दांव लगा रहल अछि जे अहाँक कार्यक्रम जल्दिये बेसी आवंटन करत, आ वस्तुतः हर वास्तविक दुनियाक परिदृश्य मे, ओ दांव सुन्दर ढंग सं फल दैत अछि. अप्रयुक्त वर्चुअल पता स्थान कें लागत आधुनिक 64-बिट सिस्टम पर अनिवार्य रूप सं शून्य छै.
के अछिआभासी स्मृति बनाम भौतिक स्मृति: एकर कोनो महत्व किएक नहि
पहिल बेर एहि व्यवहारक सामना करय बला डेवलपर सभक बीच एकटा आम चिंता संसाधनक अपव्यय अछि. अगर हमरा मात्र 4 बाइट चाही त हमर प्रोग्राम 72 केबी के खपत किएक क रहल अछि? आलोचनात्मक अंतर्दृष्टि ई अछि जे आभासी स्मृति भौतिक स्मृति नहि थिक । जखन glibc प्रोग्राम ब्रेक कें 72 केबी बढ़ाबैत छै, तखन कर्नेल प्रक्रिया कें वर्चुअल मेमोरी मैपिंग कें अपडेट करयत छै, मुदा ओ तुरंत भौतिक रैम सं ओ पन्नाक कें बैक नहि करयत छै. वास्तविक भौतिक पृष्ठ पृष्ठ दोष क माध्यम स मांग पर आवंटित कएल जाइत अछि — तखने जखन अहाँक प्रोग्राम कोनो विशिष्ट पता पर लिखैत अछि तखन कर्नेल ओकरा लेल मेमोरी क वास्तविक पृष्ठ असाइन करैत अछि.
💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →एकरऽ मतलब छै कि भले ही आपकऽ प्रक्रिया केरऽ आभासी आकार ७२ केबी बढ़ी जाय छै, लेकिन एकरऽ निवासी सेट आकार (RSS) — भौतिक रैम केरऽ मात्रा जे वास्तव म॑ खपत करलऽ जाय छै — केवल वू पन्ना स॑ बढ़ी जाय छै जेकरा आप वास्तव म॑ छूबै छै । एकल नव int क लेल, जे आम तौर पर एकटा 4 KB पन्ना अछि, आओर जे किछु पन्ना पर एरिना मेटाडाटा कब्जा करैत अछि. शेष वर्चुअल स्पेस ओतहि बैसल अछि, उपयोगक लेल तैयार, जकर कीमत पता स्थानक अतिरिक्त किछु नहि अछि — जाहि मे सँ अहाँक पास 64-बिट लिनक्स सिस्टम पर 128 टीबी अछि.
उत्पादन अनुप्रयोगक कें प्रोफाइलिंग आ निगरानी करय कें समय इ भेद महत्वपूर्ण छै. यदि अहां सॉफ्टवेयर बना रहल छी जेकरा वास्तविक संसाधन खपत कें ट्रैक करय कें जरूरत छै — चाहे ओ SaaS बैकएंड, माइक्रोसर्विस, या एनालिटिक्स पाइपलाइन जेना कि व्यवसायिक संचालन कें लेल Mewayz जैना प्लेटफॉर्म पर चलय छै — त अहां कें हमेशा वर्चुअल आकार कें बजाय आरएसएस कें निगरानी करबाक चाही. /proc/[pid]/smaps, valgrind --tool=massif, आओर pmap सन उपकरण अहाँकेँ भ्रामक आभासी स्मृति आँकड़ाक बजाय सटीक भौतिक स्मृति पदचिह्न द' सकैत अछि.
अलग-अलग आवंटक पहिल आवंटन कें कोना संभालएयत छै
72 केबी आँकड़ा glibc क' ptmalloc2 क' लेल विशिष्ट अछि. अन्य आवंटक अलग-अलग ट्रेडऑफ करयत छै, आ प्रारंभिक आवंटन ओवरहेड तदनुसार भिन्न होयत छै. प्रदर्शन-संवेदनशील अनुप्रयोगक कें लेल आवंटक कें चयन करय कें समय इ अंतरक कें समझनाय मूल्यवान छै.
- jemalloc (फेसबुक, FreeBSD द्वारा उपयोग करलऽ जाय छै) — थ्रेड-स्थानीय कैश के साथ एक अधिक दानेदार अखाड़ा संरचना के उपयोग करै छै. प्रारंभिक ओवरहेड बेसी (प्रायः 200+ केबी) होय के प्रवृत्ति रखै छै लेकिन लॉक कंटेंशन कम होय के कारण बेहतर मल्टी-थ्रेडेड प्रदर्शन प्रदान करै छै.
- tcmalloc (गूगल केरऽ थ्रेड-कैशिंग मैलोक) — डिफ़ॉल्ट रूप स॑ लगभग 2 एमबी केरऽ प्रति-थ्रेड कैश आवंटित करै छै, आक्रामक पूर्व-आवंटन के साथ । प्रारंभिक ओवरहेड बेसी होइत अछि, मुदा बादक छोट-छोट आवंटन अत्यंत तेज होइत अछि.
- musl libc क' malloc — सभ आवंटन क' लेल mmap पर आधारित एकटा बहुत सरल डिजाइन क' उपयोग करैत अछि. प्रारंभिक ओवरहेड न्यूनतम छै (प्रायः केवल 4 केबी प्रति आवंटन), मुदा बेसि बेर सिस्टम कॉल कें कारण प्रति-आवंटन लागत बेसि होयत छै.
- mimalloc (Microsoft) — 64 एमबी खंडक कें साथ खंड-आधारित आवंटन कें उपयोग करयत छै. पहिल आवंटन 64 एमबी वर्चुअल आरक्षण (न्यूनतम भौतिक प्रतिबद्धता कें साथ), असाधारण स्थानीयता आ थ्रूपुट कें लेल ट्रेडिंग पता स्थान कें ट्रिगर करयत छै.
ई आवंटक कें बीच चुनाव पूरा तरह सं अहां कें कार्यभार पर निर्भर करय छै. भारी बहु-थ्रेडेड आवंटन कें साथ लंबा समय सं चल रहल सर्वर अनुप्रयोगक कें लेल, jemalloc या tcmalloc आमतौर पर glibc कें डिफ़ॉल्ट सं बेहतर प्रदर्शन करएयत छै. मेमोरी-संकुचित एम्बेडेड सिस्टम कें लेल, कम थ्रूपुट कें बावजूद musl कें सरल तरीका बेहतर भ सकय छै. अधिकांश सामान्य-उद्देश्य डेस्कटॉप आओर सर्वर अनुप्रयोग क लेल, ptmalloc2 क 72 केबी प्रारंभिक ओवरहेड एकटा उचित डिफ़ॉल्ट क प्रतिनिधित्व करैत अछि जे बिना ट्यूनिंग क नीक काज करैत अछि.
प्रारंभिक आवंटन व्यवहार ट्यून करब
जँ डिफ़ॉल्ट 72 केबी प्रारंभिक ओवरहेड वास्तव मे अहाँक उपयोग केस क लेल समस्याग्रस्त अछि — शायद अहाँ हजारों अल्पकालिक प्रक्रिया कए स्पॉन क रहल छी, प्रत्येक केवल मुट्ठी भर आवंटन कए रहल अछि — glibc mallopt() आओर MALLOC_ परिवार क वातावरण चर क माध्यम स कईटा ट्यूनेबल प्रदान करैत अछि.
M_TOP_PAD पैरामीटर नियंत्रित करैत अछि जे आवंटक तत्काल आवश्यकता सँ परे कतेक अतिरिक्त मेमोरी अनुरोध करैत अछि. mallopt(M_TOP_PAD, 0) क' संग एकरा 0 पर सेट करब आवंटक केँ कहैत अछि जे ओ केवल ओहि चीजक अनुरोध करय जे जरूरत अछि, जाहि सँ प्रारंभिक ओवरहेड काफी कम भ' जाइत अछि. M_MMAP_THRESHOLD पैरामीटर ओय आकार कें नियंत्रित करयत छै जइ सं ऊपर आवंटन अखाड़ा कें बजाय mmap कें उपयोग करयत छै. M_TRIM_THRESHOLD नियंत्रित करैत अछि जखन मुक्त मेमोरी ओएस मे वापस कएल जाएत अछि. आओर चूँकि glibc 2.26, glibc.malloc.tcache_count आओर glibc.malloc.tcache_max ट्यूनेबल अहाँ केँ थ्रेड कैश व्यवहार केँ नियंत्रित करबाक अनुमति दैत अछि.
हालांकि, एकटा सावधानी के शब्द: बिना सावधानीपूर्वक बेंचमार्किंग केने एहि पैरामीटर के ट्यून करला सं लगभग हमेशा हालात आओर खराब भ जाइत अछि. डिफ़ॉल्ट क॑ व्यापक वास्तविक दुनिया प्रोफाइलिंग के आधार प॑ चुनलऽ गेलऽ छेलै, आरू ई काम के बोझ केरऽ विशाल बहुमत लेली एगो मीठऽ जगह के प्रतिनिधित्व करै छै । जाबे तक अहां के पास प्रोडक्शन प्रोफाइलिंग सं मजबूत सबूत नै रहत जे मैलोक ओवरहेड एकटा अड़चन अछि — आ अहां अपन बदलाव के प्रभाव के नापने छी — डिफ़ॉल्ट के छोड़ू. आवंटक केरऽ समय स॑ पहल॑ अनुकूलन याक शेविंग केरऽ एगो विशेष रूप स॑ कपटी रूप छै जेकरा म॑ नगण्य लाभ लेली अनगिनत इंजीनियरिंग घंटो के खपत होय गेलऽ छै ।
ई हमरा सिस्टम प्रोग्रामिंग के बारे में की सिखाबै छै
72 केबी केरऽ प्रथम-आवंटन रहस्य, एकरऽ मूल म॑, अमूर्त परत के बारे म॑ एगो पाठ छै । C++ अहाँकेँ ई भ्रम दैत अछि जे new int 4 बाइट आवंटित करैत अछि । भाषा मानक कहैत अछि। अहाँक मानसिक मॉडल एना कहैत अछि। लेकिन आपकऽ कोड आरू हार्डवेयर के बीच परिष्कृत सिस्टमऽ के ढेर बैठलऽ छै — C++ रनटाइम, C लाइब्रेरी आवंटक, कर्नेल केरऽ वर्चुअल मेमोरी सबसिस्टम, आरू हार्डवेयर केरऽ MMU आरू TLB — हर एक अपनऽ व्यवहार, अनुकूलन, आरू ओवरहेड जोड़ै छै.
ई कोनो दोष नहि अछि। ई सिस्टम सॉफ्टवेयर के पूरा बिंदु अछि. प्रत्येक परत एकटा वास्तविक समस्या कें हल करय कें लेल मौजूद छै: आवंटक मौजूद छै अइ कें लेल अहां कें हर आवंटन कें लेल सिस्टम कॉल नहि करय कें होयत. वर्चुअल मेमोरी सिस्टम मौजूद छै अइ कें लेल अहां कें सीधा भौतिक मेमोरी कें प्रबंधन नहि करय कें होयत. पृष्ठ दोष हैंडलर मौजूद छै अतः मेमोरी आलसी आ कुशलता सं प्रतिबद्ध छै. हर परत बहुत रास प्रदर्शन आ सुविधा के लेल कम मात्रा में पारदर्शिता के व्यापार करैत अछि.
सबसे विश्वसनीय, उच्चतम प्रदर्शन करय वाला सिस्टम बनाबै वाला डेवलपर वू छै जे ई परतऽ क॑ समझै छै — ई लेली नै कि ओकरा एकरा प॑ लगातार सोचै के जरूरत छै, बल्कि ई लेली कि जब॑ कुछ अप्रत्याशित होय जाय छै (जैना कि रहस्यमय 72 केबी आवंटन), त॑ ओकरा पास ई समझै लेली मानसिक मॉडल होय छै कि की वजह छै. चाहे अहां रियल-टाइम ट्रेडिंग सिस्टम, गेम इंजन, या हजारों उपयोगकर्ताक कें सेवा करय वाला बिजनेस प्लेटफॉर्म बना रहल होय, सिस्टम स्तर पर अहां कें कोड वास्तव मे की करय छै, इ बात कें बारे मे तर्क करय कें क्षमता ही सक्षम डेवलपरक कें असाधारण डेवलपर सं अलग करय छै. 72 केबी कोनो बग नहि अछि। ई अहाँक आवंटक अछि जे अपन काज शानदार ढंग सँ क' रहल अछि.
आइ अपन व्यवसाय ओएस बनाउ
फ्रीलांसर स॑ ल॑ क॑ एजेंसी तलक, मेवेज 207 एकीकृत मॉड्यूल के साथ 138,000+ व्यवसाय क॑ शक्ति प्रदान करै छै. मुफ्त मे शुरू करू, जखन बढ़ब तखन अपग्रेड करू.
मुफ्त खाता बनाउ →Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
Start managing your business smarter today
Join 30,000+ businesses. Free forever plan · No credit card required.
Ready to put this into practice?
Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.
Start Free Trial →Related articles
Hacker News
Show HN: Spice simulation → oscilloscope → verification with Claude Code
Apr 17, 2026
Hacker News
Hospital at centre of child HIV outbreak caught reusing syringes in Pakistan
Apr 16, 2026
Hacker News
George Orwell Predicted the Rise of "AI Slop" in Nineteen Eighty-Four (1949)
Apr 16, 2026
Hacker News
Everything we like is a psyop
Apr 16, 2026
Hacker News
U.S. to Create High-Tech Manufacturing Zone in Philippines
Apr 16, 2026
Hacker News
New unsealed records reveal Amazon's price-fixing tactics, California AG claims
Apr 16, 2026
Ready to take action?
Start your free Mewayz trial today
All-in-one business platform. No credit card required.
Start Free →14-day free trial · No credit card · Cancel anytime