Hacker News

Mba’érepa peteĩha C++ (m)asignación akóinte 72 KB.

Umi mba’e oje’éva

11 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Pe Misterio oĩva nde C++ Asignación peteĩha rapykuéri

Rehai peteĩ programa C++ isãsóva. Peteĩ int pyahu. Irundy byte rehegua. Embopu strace térã nde perfilador mandu’a rehegua rehayhuvéva, ha upépe oĩ — ne rembiapo ojerure ramoite 72 KB rupi sistema operativo-gui. Ndaha’éi 4 byte rehegua. Ndaha’éi 64 byte rehegua. Peteĩ 72 KB henyhẽva. Oiméramo rema’ẽma ra’e upe número rehe ha reñeporandu ijapúpa ndéve nde herramienta, ndaha’éi ndeaño. Ko jepokuaa ha’etévaicha iñextraño ha’e peteĩ porandu ojejapovéva C++ moheñóiharakuéra apytépe ojo’óva peteĩha jey memoria interna-pe, ha ñembohovái ñandegueraha peteĩ jeguata fascinante-pe umi capa oguapýva nde código ha hardware añetegua apytépe.

Mba’épa oiko Rehenói jave pyahu

Eikuaa hag̃ua 72 KB taꞌãngamýi, tekotevẽ eheka pe cadena de asignación henyhẽva. Nde kódigo C++ omoañetévo int pyahu, compilador ombohasa upéva peteĩ ñehenói operador pyahu-pe, hetavéva sistema Linux-pe odelega malloc-pe glibc-gui. Ha katu malloc ndojeruréi directamente kernel-pe 4 byte mandu’arã. Pe kernel ombaꞌapo página-pe — jepivegua 4 KB x86_64-pe — ha peteĩ sistema ñehenói repykue tuichaiterei peteĩ jeike manduꞌa isãsóva rehe. Oñehenóiramo brk() térã mmap() opaite asignación individual-pe g̃uarã ojapóta oimeraẽ programa ndaha’éiva trivial oñemongu’e hag̃ua.

Umi rangue, glibc mandu’a ñeme’ẽha — peteĩ implementación hérava ptmalloc2, ijeheguiete oguejyva’ekue Doug Lea clásico dlmalloc-gui — omba’apo peteĩ mbytehára ramo. Ojerure manduꞌa bloque tuicháva kernel-gui tenonderãite, upéi otallá michĩvévape ne programa oikotevẽháicha. Kóva haꞌehína mbaꞌeichaitépa iñimportante ne asignación 4 byte peteĩha omoñepyrũ peteĩ mbaꞌejerure tuichavéva sistema operativo-pe. Pe asignador ndaha'éi odesperdiciáva. Ha’e hína ha’évo estratégico.

Ñamboja’o 72 KB: Moõpa oho umi Byte

Pe asignación ñepyrũrã overhead ou heta componente distinto-gui, pe tiempo de ejecución omoñepyrũva’erã ikatu mboyve ome’ẽ ndéve peteĩ byte jepe mandu’a ojepurukuaáva. Ñantende jave peteĩteĩva componente omyesakã mba’érepa pe papapy oguejy oĩháme.

Peteĩha, glibc malloc omoñepyrũ arena principal — kuatiañe’ẽ ryru tenondegua oñangarekóva opaite asignación rosca principal-pe. Ko arena oguereko metadato montón-pe g̃uarã, puntero lista libre-pe g̃uarã ha estructura bin-pe g̃uarã iñambuéva asignación tuichakue-pe g̃uarã. Pe asignador ombohape programa ñemombyta sbrk() rupive, ha pe ñembotuichave ñepyrũrã oñemboguata peteĩ parámetro hyepypegua hérava M_TOP_PAD, oñembohapéva 128 KB relleno-pe. Ha katu, pe mba’ejerure ñepyrũrã añetegua oñemboheko página ñemboheko ha ruptura ñemohenda oĩmavape g̃uarã, heta jey osẽ peteĩ mba’ejerure peteĩha michĩvéva — jepivegua oguejy upe 72 KB figura ypýpe peteĩ tembiapo oñepyrũ ramóvape.

Mokõiha, glibc 2.26 guive, pe asignador omoñepyrũ peteĩ thread-local caché (tcache) ojepuru ypy jave. Pe tcache oguereko 64 bin (peteĩ peteĩ clase tuichakue asignación michĩva rehegua), peteĩteĩva ikatu oguereko 7 pehẽngue caché-pe peve. Pe tcache_perthread_struct voi oipuru 1 KB rupi, ha katu pe acto omoñepyrũvo omoñepyrũ arena ñembosako’i tuichavéva. Mbohapyha

Sistema Arena rehegua ha Mba’érepa Arandu Pre-Asignación

Pe decisión oñeme’ẽ mboyve peteĩ mandu’a pehẽngue tuichaitereíva ojejerure rangue peteĩteĩva ndaha’éi peteĩ accidente implementación rehegua. Ha’e peteĩ compensación deliberada ingeniería rehegua oñemopyendáva década experiencia programación sistema-pe. Opaite ñehenói brk() térã mmap()-pe oike peteĩ jehaipyre jehaipyre puruhára rendaguégui kernel rendaguépe, ñemoambue tembiaporã mandu’a virtual mapeo rehegua ha ikatu oñembopyahu página página rehegua. Hardware moderno-pe, peteĩ sistema ñehenói añoite hepyeterei haimete 100-200 nanosegundos — trivial aislamiento-pe, catastrófico escala-pe.

Epensamína peteĩ programa ojapóva 10.000 asignación michĩva ñepyrũ jave. Asignación previo’ỹre, upéva he’iséta 10.000 ñehenói sistema rehegua, hepykue haimete 1-2 milisegundos de gasto general puro. Peteĩ asignador arena-pegua rupive, peteĩha asignación omoñepyrũ peteĩ sistema ñehenói, ha umi 9.999 asignación oúva upe rire oñeservi enteramente espacio usuario-pe umi operación aritmética puntero ha lista enlazada rupive — peteĩteĩva ogueraha haimete 10-50 nanosegundos. Pe matemática ndaha’éi mokõi mba’e: pre-asignación ogana orden de magnitud rupive.

Pe 72 KB rehecháva nde asignación peteĩháme ndaha’éi memoria ojedesperdiciáva — ha’e peteĩ inversión desempeño rehegua. Pe asignador oapuesta hína nde programa ojapotaha hetave asignación pya’e, ha prácticamente opa escenario mundo real-pe, upe apuesta opaga porãiterei. Pe espacio dirección virtual ndojeporúiva repykue haꞌehína esencialmente cero umi sistema 64 bits koꞌag̃aguápe.

rehegua

Mandu’a Virtual vs. Mandu’a Física: Mba’érepa Noimportái

Peteĩ jepy’apy jepivegua umi moheñóiharakuéra apytépe ojuhúva peteĩha jey ko teko ha’e recurso ñembyai. Aikotevẽramo 4 byte añónte, mba’érepa che programa oipuru 72 KB? Pe jesareko iñimportantetereíva ha’e mandu’a virtual ndaha’eiha mandu’a físico. glibc ombohape jave programa ñembyai 72 KB, pe kernel ombopyahu umi proceso mapeo memoria virtual rehegua, ha katu ndojapói pyaꞌete oipytyvõva umi página RAM física reheve. Umi página físico añetegua oñeme’ẽ ojejeruréramo página falla rupive — ne programa ohai jave peteĩ dirección específica-pe añoite pe kernel oasigna chupe peteĩ página añetegua mandu’a rehegua.

Kóva he’ise jepémo ne proceso tuichakue virtual ojupi 72 KB, iresident set tuichakue (RSS) — RAM físico ojeporúva añetehápe — oñembohetave umi página añetehápe repokohápe añoite. Peteĩ int pyahúpe g̃uarã, upéva haꞌehína jepi peteĩ 4 KB página, ha avei oimeraẽva página oguerekóva arena metadato. Pe espacio virtual hembýva oguapy upépe, oĩmava ojepuru hag̃ua, ndohepyme’ẽi mba’eve ndaha’éiramo espacio dirección rehegua — umíva apytégui reguereko 128 TB peteĩ sistema Linux 64 bits-pe.

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

Ko joavy tuicha mba’e ojejapo jave perfil ha ojesareko jave umi aplicación producción rehegua. Emopu’ãramo software oikotevẽva ojesareko recurso jepuru añeteguáva rehe — taha’e peteĩ SaaS backend, peteĩ microservicio térã peteĩ pipeline análisis rehegua umi oñemboguatávaicha plataforma ha’eháicha Mewayz-pe umi operación empresarial-pe g̃uarã — akóinte eñangarekova’erã RSS rehe ndaha’éi tuichaha virtual. Tembipurukuéra ha’eháicha /proc/[pid]/smaps, valgrind --tool=massif ha pmap ikatu ome’ẽ ndéve mandu’a físico rape hekopete, ombotavy rangue mandu’a virtual figura.

Mba’éichapa umi Asignador iñambuéva omboguata peteĩha Asignación

Pe 72 KB taꞌãngamýi haꞌehína específico glibc ptmaloc2-pe g̃uarã. Ambue asignador ojapo iñambuéva compensación, ha pe gasto general asignación ñepyrũrã iñambue upéicha. Ojekuaa hag̃ua ko’ã joavy iporãiterei ojeporavóramo peteĩ asignador umi aplicación oñemomba’éva rendimiento rehe.

    rehegua
  • jemalloc (oipurúva Facebook, FreeBSD) — Oipuru peteĩ arena estructura granularvéva orekóva caché thread-local. Pe mba’e’apopy ñepyrũrã oguereko jepi yvateve (heta jey 200+ KB) ha katu ome’ẽ rendimiento heta rosca iporãvéva oñemboguejýgui contención bloqueo rehegua.
  • tcmalloc (Google Thread-Caching Malloc) — Omeꞌe peteĩ caché peteĩ rosca rehegua haimete 2 MB por defecto, agresivo pre-asignación reheve. Pe gasto general ñepyrũrã tuichave, ha katu umi asignación michĩva oúva upe rire ipya’eterei.
  • musl libc’s malloc — Oipuru peteĩ diseño tuicha isãsovéva oñemopyendáva mmap-pe opaite asignación-pe g̃uarã. Pe gasto general ñepyrũrã michĩmi (heta jey 4 KB-nte peteĩ asignación-pe g̃uarã), ha katu peteĩ asignación repykue tuichave oñehenói jepive rupi sistema-pe.
  • mimalloc (Microsoft) — Oipuru asignación segmento rehegua 64 MB segmento reheve. Peteĩha asignación omoñepyrũ peteĩ reserva virtual 64 MB (oguerekóva compromiso físico michĩvéva), espacio dirección comercial rehegua localidad ha rendimiento excepcional-pe g̃uarã.
rehegua

Pe jeporavo ko’ã asignador apytépe odependepaite ne rembiapo carga rehe. Umi aplicación servidor rehegua ipukúvape g̃uarã oguerekóva asignación multi-rosca ipohýiva, jemalloc térã tcmalloc jepivegua osẽ porãve glibc ñepyrũrãgui. Umi sistema incorporado memoria-pe g̃uarã, ikatu iporãve musl enfoque isãsovéva jepémo imbovyve rendimiento. Hetave purupyrã escritorio ha servidor propósito general-pe g̃uarã, ptmalloc2 72 KB mbaꞌerepy ñepyrũrã ohechauka peteĩ ñepyrũrã hekopete ombaꞌapo porãva oñembohekoꞌeỹre.

Oñemboheko pe Asignación Ñepyrũ reko

Pe mba’e’oka ñepyrũrã 72 KB ñepyrũrã ha’éramo añetehápe apañuãi nde jepuru kásope g̃uarã — ikatu remoheñói miles de proceso mbykymi, peteĩteĩva ojapo peteĩ pokõi asignación añónte — glibc ome’ẽ heta sintonización mallopt() ha MALLOC_ familia variable tekoha rehegua rupive.

Pe M_TOP_PAD parámetro oisambyhy mboy mandu’a extra ojerure pe asignador ohasávo pe oñeikotevẽva pya’e. Oñemohenda 0-pe mallopt(M_TOP_PAD, 0) rupive he’i asignador-pe ojerure hag̃ua oñeikotevẽva añoite, omboguejývo tuichaiterei pe mba’e’apopy ñepyrũrã. Pe M_MMAP_THRESHOLD parámetro oisambyhy pe tuichakue yvateve umi asignación oipuru mmap arena rangue. Pe M_TRIM_THRESHOLD oisambyhy ojegueru jeývo mandu’a oñemosãsóva SO-pe. Ha glibc 2.26 guive, umi glibc.malloc.tcache_count ha glibc.malloc.tcache_max ñembohekorã oheja ndéve eñangareko rosca caché reko.

Ha katu, peteĩ ñe’ẽ ñeñangarekorã: oñeafinávo ko’ã parámetro ojejapo’ỹre benchmarking oñeñangareko’ỹre haimete jepivegua ivaive. Umi por defecto ojeporavókuri oñemopyendáva extenso perfil mundo real-pe, ha orrepresenta peteĩ punto dulce tuicha mayoría carga de trabajo-pe g̃uarã. A no ser que reguereko evidencia mbarete perfil producción-gui malloc overhead ha’eha peteĩ cuello de botella — ha remedi impacto ne cambio-kuéra rehegua — eheja umi default. Optimización prematuro asignador rehegua ha’e peteĩ forma particularmente insidiosa afeitar yak rehegua okonsumíva hetaiterei aravo ingeniería rehegua beneficio despreciable-pe ĝuarã.

Mba’épa ñanembo’e kóva Programación Sistema rehegua

Pe misterio 72 KB peteĩha asignación rehegua ha’e, ipype, peteĩ mbo’epy capas abstracción rehegua. C++ omeꞌe ndéve taꞌãngamýi int pyahu omeꞌeha 4 byte. Pe norma de lenguaje he’i upéicha. Nde modelo mental he’i upéicha. Ha katu nde código ha hardware apytépe oguapy peteĩ pila sistema sofisticado — C++ jegueroguata jave, C biblioteca asignador, kernel subsistema memoria virtual rehegua, ha hardware MMU ha TLB — peteĩteĩ omoĩva heko tee, optimización ha overhead.

Kóva ndaha’éi peteĩ mba’e vai. Haꞌehína pe punto tuichakue software sistema rehegua. Káda capa oĩ oñesolusiona hag̃ua peteĩ apañuãi añetegua: pe asignador oĩ upévare natekotevẽi rejapo ñehenói sistema rehegua opaite asignación rehegua. Pe sistema memoria virtual oĩ upévare natekotevẽi remboguata memoria física directamente. Pe página falla ñangarekoha oĩ upévare mandu’a oñekompromete ipy’aju ha hekopete. Opaite capa oñekomersia michĩmi transparencia hetaiterei rendimiento ha conveniencia rehe.

Umi moheñóiharakuéra omopuꞌavaꞌekue umi sistema ojeroviavéva, osẽ porãvéva haꞌehína umi ontendéva koꞌã capa — ndahaꞌei tekotevẽgui opensa tapiaite hesekuéra, ha katu oiko jave peteĩ mbaꞌe oñehaꞌarõꞌeỹva (peteĩ asignación misteriosa 72 KB-icha), oguereko hikuái modelo mental oikuaa hag̃ua mbaꞌerepa. Taha’e remopu’ãva peteĩ sistema comercial tiempo real-pe, peteĩ motor de juego térã peteĩ plataforma empresarial oservíva miles de usuario-pe, pe capacidad rerrazona haĝua mba’épa añetehápe ojapo nde código nivel sistema-pe ha’e pe omboja’óva umi desarrollador ikatupyrýva umi excepcional-gui. Pe 72 KB ndaha’éi peteĩ mba’e’oka. Ha’e nde asignador ojapóva hembiapo porãiterei.

Emopu’ã ne rembiaporã SO ko’áĝa

Umi freelancer guive umi organismo peve, Mewayz omombarete 138.000+ empresa-pe 207 módulo integrado reheve. Eñepyrũ gratis, embopyahu okakuaa vove.

|
pe

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