Чаро тақсимоти аввалини C++ (m) ҳамеша 72 KB аст?
Шарҳҳо
Mewayz Team
Editorial Team
Асрори паси аввалин тақсимоти C++-и шумо
Шумо як барномаи оддии C++ менависед. Якнави ягона. Чор байт. Шумо strace ё профили хотираи дӯстдоштаи худро оташ мезанед ва ин ҷост — раванди шумо танҳо аз системаи оператсионӣ тақрибан 72 КБ талаб кард. На 4 байт. На 64 байт. Андозаи пурраи 72 KB. Агар шумо боре ба ин рақам нигоҳ карда бошед ва фикр карда бошед, ки оё асбоби шумо ба шумо дурӯғ мегӯяд, шумо танҳо нестед. Ин рафтори ба назар аҷибу аҷибе яке аз саволҳои маъмултарин дар байни таҳиягарони C++ мебошад, ки бори аввал таҷҳизоти дохилии хотираро мекобанд ва ҷавоб моро ба як саёҳати ҷолибе дар байни қабатҳои байни коди шумо ва сахтафзори воқеӣ мебарад.
Вақте ки шумо ба нав
занг мезанед, чӣ мешавадБарои фаҳмидани рақами 72 KB, шумо бояд силсилаи пурраи тақсимотро пайгирӣ кунед. Вақте ки рамзи C++-и шумо new int -ро иҷро мекунад, компилятор онро ба занг ба оператор нав тарҷума мекунад, ки дар аксари системаҳои Linux ба malloc аз glibc вакил мекунад. Аммо malloc мустақиман аз ядро 4 байт хотира талаб намекунад. Ядро дар саҳифаҳо кор мекунад - маъмулан 4 КБ дар x86_64 - ва арзиши занги система нисбат ба дастрасии оддии хотира хеле бузург аст. Занг задани brk() ё mmap() барои ҳар як тақсимоти инфиродӣ ҳар як барномаи ғайримуқаррариро бозмедорад.
Ба ҷои ин, тақсимкунандаи хотираи glibc - татбиқе бо номи ptmalloc2, ки худ аз классикии dlmalloc-и Дуг Ли омадааст - ҳамчун миёнарав амал мекунад. Он блокҳои калони хотираро аз ядро пешакӣ талаб мекунад ва сипас онҳоро ба қисмҳои хурдтар ҷудо мекунад, зеро барномаи шумо ба онҳо ниёз дорад. Ин сабаби асосии тақсимоти 4-байтии шумост, ки дархости хеле калонтарро ба системаи оператсионӣ ба вуҷуд меорад. таксимкунанда ба исрофкорй рох намедихад. Он стратегӣ аст.
Тақсими 72 KB: Байтҳо ба куҷо мераванд
Хароҷоти ибтидоии тақсимот аз якчанд ҷузъҳои ҷудогона иборат аст, ки вақти кор бояд пеш аз он ки ба шумо ҳатто як байт хотираи қобили истифода диҳад, оғоз кунад. Фаҳмидани ҳар як ҷузъро мефаҳмонад, ки чаро рақам дар куҷо ҷойгир аст.
Аввал, malloc-и glibc аренаи асосиро - сохтори асосии муҳосиботро оғоз мекунад, ки ҳамаи тақсимотҳоро дар риштаи асосӣ пайгирӣ мекунад. Ин арена мета-маълумотҳоро барои теппа, нишондиҳандаҳои рӯйхати ройгон ва сохторҳои биниро барои андозаҳои гуногуни тақсимот дар бар мегирад. Ҷудокунанда танаффуси барномаро тавассути sbrk() васеъ мекунад ва васеъшавии аввала аз ҷониби параметри дохилӣ бо номи M_TOP_PAD идора карда мешавад, ки пешфарз ба 128 КБ пуркунӣ баробар аст. Бо вуҷуди ин, дархости воқеии ибтидоӣ барои ҳамоҳангсозии саҳифа ва мавқеи мавҷудаи танаффус тасҳеҳ карда мешавад, ки ин аксар вақт ба дархости хурдтари аввал оварда мерасонад - одатан дар наздикии ин рақами 72 КБ дар раванди нав оғозшуда фуруд меояд.
Дуюм, аз glibc 2.26, тақсимкунанда ҳангоми истифодаи аввал кэши риштаи маҳаллӣ (tcache)-ро оғоз мекунад. Дар tcache дорои 64 бинт (якто барои як синфи андозаи хурд тақсим карда мешавад), ки ҳар кадом қодиранд то 7 порчаи кэшшударо нигоҳ доранд. Худи tcache_perthread_struct тақрибан 1 КБ сарф мекунад, аммо амали оғоз кардани он ба танзими васеътари арена мусоидат мекунад. Сеюм, вақти иҷроиши C++ аллакай пеш аз он ки main()-и шумо ҳатто иҷро шавад, тақсимотро иҷро кардааст — созандагони статикӣ, оғозкунии буфери iostream барои std::cout ва дӯстон ва танзими маҳалли ҷойгиршавӣ ҳама ба ин пайраҳаи ибтидоӣ мусоидат мекунанд.
Системаи Arena ва чаро пеш аз тақсимот оқилона аст
Қарор дар бораи пешакӣ ҷудо кардани қисми зиёди хотира ба ҷои дархости қисм-қисм, тасодуфи амалӣ нест. Ин як савдои барқасдона муҳандисӣ аст, ки аз таҷрибаи даҳсолаҳои барномасозии система реша мегирад. Ҳар як занг ба brk() ё mmap() гузариш аз фазои корбар ба фазои ядро, тағир додани харитасозии хотираи виртуалии раванд ва навсозии эҳтимолии ҷадвали саҳифаро дар бар мегирад. Дар сахтафзорҳои муосир, як занги системавӣ тақрибан 100-200 наносония арзиш дорад - дар алоҳидагӣ ночиз ва дар миқёси фалокатбор.
Барномаеро баррасӣ кунед, ки ҳангоми оғозёбӣ 10,000 тақсимоти хурдро анҷом медиҳад. Бе тақсимоти пешакӣ, ин маънои 10,000 занги системаро дорад, ки тақрибан 1-2 миллисония хароҷоти холисро талаб мекунад. Бо тақсимкунандаи дар арса асосёфта, тақсимоти аввал занги ягонаи системаро ба вуҷуд меорад ва 9,999 тақсимоти минбаъда пурра дар фазои корбар тавассути амалҳои арифметикии нишондиҳандаҳо ва рӯйхатҳои алоқаманд хидмат карда мешаванд - ҳар кадоми онҳо тақрибан 10-50 наносонияро дар бар мегирад. Математика якранг аст: тақсимоти пешакӣ аз рӯи фармоишҳои бузург ғолиб меояд.
72 KB, ки шумо дар тақсимоти аввалини худ мебинед, хотираи беҳуда сарфшуда нест - ин сармоягузории иҷроиш аст. Ҷудокунанда боварӣ дорад, ки барномаи шумо ба зудӣ тақсимоти бештар хоҳад кард ва амалан дар ҳар як сенарияи воқеии ҷаҳон, ин шарт ба таври назаррас фоида меорад. Арзиши фазои суроғаҳои виртуалии истифоданашуда дар системаҳои муосири 64-бит аслан сифр аст.
Хотираи виртуалӣ ва хотираи ҷисмонӣ: Чаро ин аҳамият надорад
Нигаронии умумӣ дар байни таҳиягарон, ки бори аввал ба ин рафтор дучор мешаванд, партови захираҳо мебошад. Агар ба ман танҳо 4 байт лозим бошад, чаро барномаи ман 72 KB истеъмол мекунад? Фаҳмиши интиқодӣ ин аст, ки хотираи виртуалӣ хотираи ҷисмонӣ нест. Вақте ки glibc танаффуси барномаро то 72 КБ дароз мекунад, ядро харитаҳои хотираи виртуалии равандро навсозӣ мекунад, аммо он саҳифаҳоро бо хотираи физикии RAM фавран пуштибонӣ намекунад. Саҳифаҳои воқеии физикӣ мувофиқи дархост тавассути айбҳои саҳифа тақсим карда мешаванд — танҳо вақте ки барномаи шумо ба суроғаи мушаххас менависад, ядро саҳифаи воқеии хотираро ба он таъин мекунад.
💡 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 →Ин маънои онро дорад, ки гарчанде андозаи виртуалии раванди шумо 72 КБ зиёд мешавад, андозаи маҷмӯи резидентии он (RSS) - миқдори RAM-и физикии воқеан истеъмолшуда - танҳо ба саҳифаҳое, ки шумо воқеан ламс мекунед, зиёд мешавад. Барои як int нав, ин одатан як саҳифаи 4 КБ аст ва илова бар он ҳар саҳифаҳое, ки метамаълумотҳои аренаро ишғол мекунанд. Фазои боқимондаи маҷозӣ дар он ҷо ҷойгир аст, ки барои истифода омода аст ва танҳо фазои суроғавӣ арзиш надорад, ки шумо 128 ТБ дар системаи 64-битии Linux доред.
Ин тафовут ҳангоми профилсозӣ ва мониторинги барномаҳои истеҳсолӣ муҳим аст. Агар шумо нармафзореро сохта истода бошед, ки истеъмоли воқеии захираҳоро пайгирӣ кунад - хоҳ он пуштибонии SaaS, микросервис ё лӯлаи таҳлилӣ ба монанди платформаҳое, ки дар платформаҳое ба мисли Mewayz барои амалиёти тиҷоратӣ кор мекунанд - шумо бояд ҳамеша RSS-ро назорат кунед, на андозаи виртуалӣ. Асбобҳо ба монанди /proc/[pid]/smaps, valgrind --tool=massif ва pmap метавонанд ба шумо на аз гумроҳ кардани рақамҳои хотираи виртуалӣ ба шумо изи дақиқи хотираи физикиро пешниҳод кунанд.
Чӣ гуна тақсимкунандагони гуногун тақсимоти аввалро идора мекунанд
Рақами 72 KB ба ptmalloc2-и glibc хос аст. Дигар тақсимкунандагон муомилоти гуногун мекунанд ва хароҷоти ибтидоии тақсимот мувофиқан фарқ мекунад. Фаҳмидани ин фарқиятҳо ҳангоми интихоби тақсимкунанда барои барномаҳои ҳассос арзишманд аст.
- jemalloc (аз ҷониби Facebook, FreeBSD истифода мешавад) — Сохтори бештари аренаро бо кэшҳои риштаи маҳаллӣ истифода мебарад. Хароҷоти ибтидоӣ одатан баландтар аст (аксаран 200+ КБ), аммо аз сабаби кам шудани ихтилофи қулф кори беҳтари чанд риштаро таъмин мекунад.
- tcmalloc (Malloc Thread-Caching Google) — Бо нобаёнӣ кэши ҳар як ришта тақрибан 2 МБ-ро бо тақсимоти шадиди пешакӣ ҷудо мекунад. Хароҷоти ибтидоӣ баландтар аст, аммо тақсимоти хурди минбаъда хеле зуд аст.
- malloc's musl libc — Барои ҳама тақсимот тарҳи хеле соддаро дар асоси mmap истифода мебарад. Хароҷоти ибтидоӣ ҳадди ақалл аст (аксар вақт барои як тақсимот ҳамагӣ 4 КБ), аммо арзиши ҳар як тақсимот аз сабаби зангҳои бештари система баландтар аст.
- mimalloc (Microsoft) — Тақсимоти сегментро бо сегментҳои 64 МБ истифода мебарад. Тақсимоти аввал як фармоиши виртуалии 64 МБ (бо ӯҳдадории ҳадди ақали ҷисмонӣ), фазои суроғаи тиҷоратӣ барои маҳалли истисноӣ ва қобилияти интиқолро ба вуҷуд меорад.
Интихоби байни ин тақсимкунандагон комилан аз сарбории шумо вобаста аст. Барои барномаҳои дарозмуддати сервер бо тақсимоти вазнини чанд ришта, jemalloc ё tcmalloc маъмулан аз пешфарзии glibc бартарӣ доранд. Барои системаҳои дарунсохт, ки хотираи маҳдуд доранд, сарфи назар аз интиқоли камтар, муносибати оддии musl метавонад афзалтар бошад. Барои аксари барномаҳои мизи корӣ ва серверии таъиноти умумӣ, сарбории ибтидоии ptmalloc2-и 72 КБ пешфарзи оқилона аст, ки бидуни танзим хуб кор мекунад.
Танзими рафтори тақсимоти ибтидоӣ
Агар хароҷоти ибтидоии 72 КБ барои ҳолати истифодаи шумо воқеан мушкил бошад - шояд шумо ҳазорон равандҳои кӯтоҳмуддатро тавлид карда истодаед, ки ҳар кадоми онҳо танҳо як миқдор тақсимотро анҷом медиҳанд - glibc тавассути mallopt() ва MALLOC_ оилаи тағирёбандаҳои муҳити зист якчанд танзимшавандаҳоро таъмин мекунад.
Параметри M_TOP_PAD назорат мекунад, ки чӣ қадар хотираи изофӣ аз ҷониби тақсимкунанда зиёда аз он чизе, ки фавран лозим аст, талаб мекунад. Муқаррар кардани он ба 0 бо mallopt(M_TOP_PAD, 0) ба тақсимкунанда мегӯяд, ки танҳо он чизеро, ки лозим аст, дархост кунад ва хароҷоти ибтидоиро ба таври назаррас коҳиш диҳад. Параметри M_MMAP_THRESHOLD андозаеро назорат мекунад, ки дар боло тақсимотҳо ба ҷои арена mmap -ро истифода мебаранд. M_TRIM_THRESHOLD ҳангоми баргардонидани хотираи озод ба ОС назорат мекунад. Ва азбаски glibc 2.26, танзимшавандаҳои glibc.malloc.tcache_count ва glibc.malloc.tcache_max ба шумо имкон медиҳанд, ки рафтори кэши риштаро назорат кунед.
Бо вуҷуди ин, як калимаи эҳтиёт: танзим кардани ин параметрҳо бидуни муқоисаи дақиқ тақрибан ҳамеша вазъро бадтар мекунад. Пешфарзҳо дар асоси профили васеъи ҷаҳони воқеӣ интихоб карда шуданд ва онҳо барои аксарияти сарбориҳои корӣ ҷои ширинро нишон медиҳанд. Агар шумо аз профили истеҳсолӣ далели қавӣ надошта бошед, ки сарбории malloc монеа аст - ва шумо таъсири тағироти худро чен кардаед - пешфарзҳоро танҳо гузоред. Оптимизатсияи пеш аз мӯҳлат ҷудокунанда як шакли махсусан маккоронаи тарошидани қутос мебошад, ки соатҳои бешумори муҳандисиро барои фоидаи ночиз сарф кардааст.
Ин ба мо дар бораи барномасозии системаҳо чӣ меомӯзад
Асрори 72 КБ тақсимоти аввал дар асл дар бораи қабатҳои абстраксия мебошад. C++ ба шумо тасаввуроте медиҳад, ки new int 4 байт ҷудо мекунад. Стандарти забон чунин мегӯяд. Модели равонии шумо чунин мегӯяд. Аммо дар байни коди шумо ва сахтафзор як қатор системаҳои мураккаб ҷойгир аст - вақти кори C++, ҷудокунандаи китобхонаи C, зерсистемаи хотираи виртуалии ядро ва MMU ва TLB-и сахтафзор - ҳар кадоми онҳо рафтор, оптимизатсия ва хароҷоти худро илова мекунанд.
Ин камбудӣ нест. Ин тамоми нуқтаи нармафзори система аст. Ҳар як қабат барои ҳалли мушкилоти воқеӣ вуҷуд дорад: тақсимкунанда вуҷуд дорад, бинобар ин ба шумо лозим нест, ки барои ҳар як тақсимот зангҳои системавӣ кунед. Системаи хотираи виртуалӣ вуҷуд дорад, то ба шумо лозим нест, ки хотираи ҷисмониро мустақиман идора кунед. Коркарди хатои саҳифа вуҷуд дорад, то хотира танбал ва самаранок иҷро карда шавад. Ҳар як қабат миқдори ками шаффофиятро барои миқдори зиёди фаъолият ва роҳат савдо мекунад.
Таҳиягароне, ки системаҳои боэътимод ва баландтаринро месозанд, онҳое ҳастанд, ки ин қабатҳоро мефаҳманд - на аз он сабаб, ки онҳо бояд доимо дар бораи онҳо фикр кунанд, балки аз он сабаб, ки вақте чизе ғайричашмдошт рух медиҳад (ба монанди тақсимоти пурасрор 72 КБ), онҳо модели равонӣ доранд, ки чаро. Новобаста аз он ки шумо як системаи савдои воқеӣ, муҳаррики бозӣ ё платформаи тиҷорӣ месозед, ки ба ҳазорон корбарон хидмат мерасонад, қобилияти мулоҳиза кардан дар бораи он, ки коди шумо воқеан дар сатҳи система чӣ кор мекунад, он чизест, ки таҳиягарони салоҳиятдорро аз истисноӣ ҷудо мекунад. 72 KB хато нест. Ин тақсимкунандаи шумост, ки вазифаи худро олиҷаноб иҷро мекунад.
Имрӯз OS тиҷорати худро созед
Аз фрилансерҳо то агентиҳо, Mewayz зиёда аз 138,000 корхонаҳоро бо 207 модули ҳамгирошуда қудрат медиҳад. Бепул оғоз кунед, вақте ки шумо калон мешавед, навсозӣ кунед.
Эҷод кардани ҳисоби ройгон →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