¿Kunatsa nayrïr C++ (m)asignación ukax sapa kutix 72 KB ukhama? | Mewayz Blog
Hacker News

¿Kunatsa nayrïr C++ (m)asignación ukax sapa kutix 72 KB ukhama?

Amuyunaka

10 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Nayrïr C++ Asignación ukan Misterio

Jumax mä sanu C++ programa qillqt’añamawa. Mä sapa machaq int. Pusi bytes ukanakaw utji. Jumax strace jan ukax perfil de memoria munat ukarux ninamp phichhantasma, ukatx ukanx utjiwa — proceso ukax jichhakiw niya 72 KB sistema operativo ukar mayi. Janiwa 4 bytes ukhamäkiti. Janiwa 64 bytes ukhamäkiti. Mä phuqhat 72 KB. Jumatï uka numero uñchʼukisma ukat herramientanakamajj kʼaristamti janicha sasin jisktʼasirïsta ukhajja, janiw sapakïktati. Aka muspharkañjam sarnaqawix mä jiskt’awiwa, C++ lurayirinakax nayrïr kutiw memoria internas ukar allsupxi, ukat jaysäwix mä muspharkañ thakhi capas ukanakanw irpapxistu, ukax código ukat chiqpach hardware ukanakan qunt’atawa.

Kunas machaq

jawst’atax lurasi

72 KB jakhüw amuyañatakix, taqpach cadena de asignación ukar thaqhañaw wakisi. Kunawsatix C++ codigox machaq int phuqhaski ukhax compilador ukax ukax mä jawsawiruw jaqukipi operador machaq ukar jawsañataki, ukax jilpach sistemas Linux ukanx malloc ukar glibc ukar delega. Ukampis malloc ukax janiw chiqak kernel ukarux 4 bytes de memoria mayikiti. Kernel ukax pankanakan irnaqaski — ukhampachax 4 KB x86_64 ukan — ukatx mä sistema jawsañ qullqix wali jach’awa mä sanu amuyunak mantañ ukar uñtasita. Sapa mayni jaljawitak brk() jan ukax mmap() ukar jawsañax kuna jan yäqañjam wakichäwirus sayt’ayaspawa.

| Ukax jach’a bloques de memoria ukanakaw núcleo ukanx nayraqat mayi, ukatx jisk’a chiqanakaruw tallar kunjamatix programamax munaski ukhamarjama. Akax fundamental razón ukawa nayrïr 4 byte asignación ukax sistema operativo ukar juk’amp jach’a mayiwiruw sartayi. Asignador ukax janiw ina ch’usar tukuskiti. Ukax estratégico ukhamawa.

72 KB ukar diseccionaña: Kawkhans Bytes ukax saraski

Qallta asignación overhead ukax walja yaqha componentes ukanakat juti ukax ejecución tiempo ukax qalltañapawa janïr mä byte de memoria utilizable ukar katuyañapataki. Sapa componente amuyt’asax kunats jakhüwix kawkhantix uraqir puri uk qhanañchi.

Nayraqatxa, glibc ukan malloc ukax main arena — nayrïr libronak imañ estructura ukax taqi asignaciones ukanakax jach’a thread ukan arknaqatawa. Aka arena ukax metadatos ukanak montón, libre-lista punteros ukat bin estructuras ukanak kunayman asignación tamanakatakiw utji. Asignador ukax programa t’unjañx sbrk() tuqiw jilxati, ukatx qallta jach’anchayäwix mä manqhankir parámetro M_TOP_PAD ukamp apnaqatawa, ukax 128 KB relleno ukar uñt’ayatawa. Ukampirus chiqpach qallta mayiwix panka alineación ukat utjki uka break posición ukatakix chiqanchatawa, ukax walja kutiw mä jisk’a nayrïr mayiwiruw puriyi — ukhampachax uka 72 KB jakhüwi jak’anw mä jichhak qalltat lurawinx uraqir puri.

Payïri, glibc 2.26 ukhatpacha, asignador ukax nayrïr apnaqawipanx mä thread-local caché (tcache) ukar qalltaraki. tcache ukax 64 bins (mä sapa jisk’a asignación tama clase) ukaniwa, sapa maynix 7 cached chunks ukjam katxaruñ yati. tcache_perthread_struct ukax pachpa 1 KB ukjaruw manq’asi, ukampis qalltañ lurawix juk’amp jach’a arena ukan utt’ayawiparuw sartayi. Kimsïri, C++ apnaqañ pachax nayraqatw asignaciónnak lurawayi janïr main() ukax phuqhaskipan — constructores estáticos, iostream buffer initialization for std::cout ukat amigonakataki, ukat locale configuración ukax taqiniw uka qallta montón kayuparux yanapt’apxi.

Sistema de Arena ukat kunats Pre-Asignación ukax Ch’ikhi

Mä jach’a amuyunak nayraqat churañ amtax mä juk’at mayiñat sipansa, janiw mä accidente de implementación ukhamäkiti. Mä deliberado ingeniería tradeoff ukawa, tunka maranakan sistemas programación ukan experiencia ukan saphintata. Sapa jawsaña brk() jan ukax mmap() ukarux mä contexto mayjt’ayañaw apnaqiri chiqat kernel ukar mayjt’ayaña, lurawix virtual memoria mapeo ukar mayjt’ayaña, ukat panka tabla ukar machaqar tukuyañaw wakisi. Jichha pacha hardware tuqinxa, mä sapa sistema jawsañax niya 100-200 nanosegundos ukjawa — sapakix jan yäqañjamawa, escala ukanx catastrófico.

Mä wakichäw amuyt’añäni, ukax 10.000 jisk’a asignaciones ukanakaw qalltañ pachanx lurasi. Jan pre-asignación ukax utjkaspän ukhax ukax 10.000 sistema jawsatanakaw sañ muni, ukax niya 1-2 milisegundos ukjaw q’uma gasto ukar purispa. Mä asignador basado en arena ukampixa, nayrïr asignación ukaxa mä sapa sistema jawsaña ch’amancharaki, ukatxa qhipa 9.999 asignación ukaxa taqpachawa servicios ukanxa espacio de usuario ukanxa aritmética de puntero ukhamaraki operaciones de lista enlazada ukanakampi — sapa maynixa niya 10-50 nanosegundos ukjawa. Matemáticas ukax janiw pächasiñakiti: pre-asignación ukax ordenes de magnitud ukampiw atipt’i.

ukax mä juk’a pachanakanwa

Nayrïr asignación ukan uñjkta uka 72 KB ukax janiw memoria ina ch’usar apt’atäkiti — ukax mä inversión de rendimiento ukawa. Asignador ukax apuestas ukax programamax juk’amp asignaciones ukanak jank’akiw lurani, ukatx niya sapa chiqpach pachan escenario ukanx uka apuestax wali sumaw payllasi. Jan apnaqat dirección virtual ukan qullqipax chiqpachanx cero ukhamawa jichha pacha sistemas 64 bits ukanxa.

ukat juk’ampinaka

Amuyu virtual vs. Amtawi física: Kunatsa jan wakiskirïki

Nayrïr kuti aka sarnaqawimp jikisiñax lurayirinakan mä llakisiñapax yänak ina ch’usar apt’añawa. Nayax 4 bytes ukak munsta ukhaxa, kunats programajax 72 KB ukja manq’aski? Uka amuyt’awix wali wakiskiriwa, memoria virtual ukax janiw memoria física ukakiti. Kunawsatix glibc ukax programa break ukax 72 KB ukjam jilxattayi ukhax kernel ukax proceso ukan mapeos de memoria virtual ukar machaqar tukuyi, ukampis janiw jank’ak uka pankanakarux RAM físico ukamp qhipäxar kutt’aykiti. Chiqpach jañchin pankanakax mayiwiparjamaw jaljasi pankan pantjasiwi tuqi — kunapachatix programamax mä chiqar qillqt’ki ukhakiw kernel ukax chiqpach amuyu panka ukarux churaraki.

💡 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 →

Ukax sañ muniw proceso ukan virtual tamapax 72 KB ukhas jilxattaski, ukampirus resident set size (RSS) — chiqpachan RAM físico ukax apnaqatawa — chiqpachan llamkt’at pankanakakiw jilxati. Mä sapa machaq int ukatakix, ukax mä 4 KB pankawa, ukatx kuna pankanakatix arena metadatos ukax utjki ukanak yapxatañataki. Jilt’ir chiqa virtual ukax ukan qunt’atawa, apnaqañatakix wakicht’atawa, janiw kunas qullqix munaskiti jan ukasti dirección ukan chiqapawa — ukat 128 TB ukhaw 64 bits Linux sistema ukanx utji.

Aka chiqanchawix wali wakiskiriwa kunawsatix perfil ukat uñjañax producción aplicaciones ukanak lurañataki. Jumatix software lurasksta ukax chiqpach yänak apnaqañ arknaqañapawa — SaaS backend, microservicio, jan ukax análisis pipeline ukhama plataformas ukan irnaqaski ukhamarak Mewayz negocio lurawinakataki — sapa kutiw RSS ukar uñjañama, virtual tamapat sipansa. /proc/[pid]/smaps, valgrind --tool=massif, ukat pmap ukham herramientas ukanakax chiqap físico memoria kayunak churaspawa, janiw virtual memoria chimpunak pantjasiyañakiti.

Kunjamsa kunaymana Asignación ukanakax Nayrïr Asignación ukar apnaqapxi

72 KB chimpux glibc ukan ptmaloc2 ukar uñt'ayatawa. Yaqha asignadores ukanakax kunayman tradeoffs ukanakaw lurapxi, ukatx qallta asignación ukan gastos generales ukanakax ukarjamaw mayjt’i. Uka mayjt’awinak amuyañax wali askiwa, kunawsatix mä asignador ajlliñäki ukhax rendimiento-sensitivo aplicaciones ukataki.

  • jemalloc (Facebook, FreeBSD ukan apnaqata) — Mä juk’amp granular arena ukan estructura ukamp thread-local cachés ukamp apnaqi. Qalltanx juk’amp jach’a (walja kutix 200+ KB) ukampis juk’amp suma walja threaded lurawinak puriyi kunatix bloqueo ch’axwawix juk’akiw utji.
  • tcmalloc (Google ukan Thread-Caching Malloc) — Mä caché sapa thread ukarux niya 2 MB ukjam uñt’ayi, ukax agresivo pre-asignación ukampiw uñt’ayasi. Qalltanx juk’amp jach’awa, ukampis qhipa jisk’a asignación ukanakax wali jank’akiw.
  • musl libc's malloc — Taqi jaljawinakatakix mmap ukarjam mä juk'amp sapuru lurañ apnaqi. Qalltanx juk’akiw (walja kutix 4 KB ukhakiw sapa asignación ukanx utji), ukampis sapa asignación ukanx qullqix juk’amp jach’awa kunatix sistema ukarux juk’amp jawsatawa.
  • mimalloc (Microsoft) — 64 MB segmentonakampi segmento ukarjam jaljañ apnaqi. Nayrïr asignación ukax mä reserva virtual 64 MB (mä juk’a compromiso físico ukamp), dirección de comercio ukan localidad excepcional ukat rendimiento ukatakiw ch’amanchasi.
sasaw sapxi

Aka jaljasirinakan ajlliwipax taqpach irnaqawimat dependeriwa. Jaya pacha apnaqir servidor aplicaciones ukatakix jach’a walja threaded asignación ukampi, jemalloc jan ukax tcmalloc ukax glibc ukat sipanx juk’amp askiwa. Sistemas embebidos memoria-constreñidos ukatakix musl ukax juk’amp sapuru uñakipañax juk’amp jisk’a lurawinak utjkipans wali askïspawa. Jilpacha general-propósito escritorio ukat servidor aplicaciones ukatakix, ptmaloc2 ukax 72 KB qallta overhead ukax mä razonable default uñacht’ayi, ukax jan sintonización ukampiw sum irnaqaski.

Qallta Asignación Sarnaqäwi Sintonización

Ukax 72 KB qalltawinx chiqpachanx jan walt’awiw apnaqañamatakix — inas waranq waranq juk’a pachan lurawinakap uñstayasksta, sapa maynix mä qawqha asignacionanakakiw lurapxi — glibc ukax walja sintonizables ukanakaw utji mallopt() ukat MALLOC_ familia de variables de medio ambiente uka tuqi.

Prámetro M_TOP_PAD ukax qhawqha extra memoria ukax asignador ukax mayiski ukax jank’akiw munaski ukat sipanx controla. mallopt(M_TOP_PAD, 0) ukampi 0 ukar uñt’ayañax asignador ukarux kunatix wakiski ukak mayiñapatakiw yatiyaraki, qalltanx jach’a qullqix wali jisk’achatawa. M_MMAP_THRESHOLD parámetro ukax kawkir jach’a asignacionanakas arena uksat sipans mmap apnaqapxi ukx apnaqi. M_TRIM_THRESHOLD ukax kunapachatix qhispiyat amuyux OS ukar kutt’ayatäki ukx apnaqi. Ukat glibc 2.26 ukhatpacha, glibc.malloc.tcache_count ukat glibc.malloc.tcache_max tunables ukax thread caché sarnaqawip apnaqañapatakiw jayti.

Ukampirus mä amuyt’awi aru: aka parámetros ukanakar sintonizañax jan wali amuyump benchmarking ukampix niya sapa kutiw juk’amp jan walt’ayi. Uka defaults ukanakax jach’a chiqpach pachan perfil ukarjam ajllitänwa, ukatx mä muxsa chiqawj uñacht’ayi jilpacha irnaqawinakataki. Janitï perfil de producción ukan ch’aman chimpunakax utjkchi ukhax malloc overhead ukax mä cuello de botella ukhamawa — ukat mayjt’awinakax kunjams jan walt’ayaspa ukx tupuwayksta — defaults ukanak jaytañamawa. Optimización precoz del asignador ukax mä forma especialmente insidiosa de afeitar de yak ukawa, ukax jan jakt’kay horas de ingeniería ukaruw tukuwayi, jan sinti askinakataki.

Kuns Akax Programación de Sistemas tuqit Yatichistu

72 KB nayrïr asignación misterio ukax, chuymapanx capas de abstracción ukanakat yatichäwiwa. C++ ukax mä ilusión uñacht’ayi, machaq int ukax 4 bytes ukjam uñt’ayi. Arut normax ukham siwa. Modelo mental ukax ukham siwa. Ukampis código ukat hardware ukanakanx mä pila de sistemas sofisticados ukanakaw qunt’asipxi — C++ ukan apnaqañ pacha, C biblioteca ukan asignador, núcleo ukan subsistema de memoria virtual ukat hardware ukan MMU ukat TLB — sapa mayniw sarnaqawip, optimizaciones ukat overhead ukanakamp yapxatapxi.

Akax janiw mä pantjasiwikiti. Ukax taqpach punto de sistemas software ukawa. Sapa capa ukax chiqpach jan walt’äw askichañatakiw utji: asignador ukax utjiwa ukhamat jan sistema jawsañanak sapa asignación ukar lurañax wakiskiti. Sistema de memoria virtual ukax utjiwa ukhamat janiw chiqak memoria física apnaqañax wakiskiti. Panka pantjasiwi apnaqirix utjiwa ukhamat amuyux q’añu ukat suma lurt’atawa. Sapa capa ukax mä jisk’a qhananchawimpiw aljasi, mä jach’a lurawitaki ukhamarak suma lurañataki.

| Mä sistema de comercio chiqpach pachan lurasksta, mä motor de juegos, jan ukax mä plataforma de negocios waranq waranq apnaqirinakar yanapt’asksta ukhax, kuntix chiqpachan código ukax nivel de sistema ukan luraski uka tuqit amuyt’añ yatiñax kunatix competentes desarrolladores ukanakarux excepcionales ukanakat jaljayi. 72 KB ukax janiw mä jan walt’äwikiti. Ukax jumanakan asignadoraman lurawip wali suma luraski.

Jichhürunakanx OS de negocios ukar lurañamawa

Frelancer ukanakat agencianakar puriñkama, Mewayz ukax 138.000+ negocios ukanakaruw 207 módulos integrados ukanakamp ch’amanchaski. Inakiw qalltañama, kunapachatix jilxattawaykta ukhax machaqar tukuyañamawa.

Cuenta Gratis luraña →
ukax mä juk’a pachanakanwa

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

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 →

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