Por que a primeira alocação C++ (m) sempre tem 72 KB?
Descubra por que sua primeira alocação de memória C++ solicita 72 KB em vez dos bytes esperados. Explore os detalhes internos do malloc e as camadas de gerenciamento de memória do sistema operacional explicadas.
Mewayz Team
Editorial Team
O mistério por trás de sua primeira alocação C++
Você escreve um programa C++ simples. Um único novo int. Quatro bytes. Você inicia o strace ou seu criador de perfil de memória favorito e aí está – seu processo solicitou cerca de 72 KB do sistema operacional. Não 4 bytes. Não 64 bytes. Um total de 72 KB. Se você já olhou para esse número e se perguntou se suas ferramentas estavam mentindo para você, você não está sozinho. Esse comportamento aparentemente bizarro é uma das perguntas mais frequentes entre os desenvolvedores de C++ que investigam os componentes internos da memória pela primeira vez, e a resposta nos leva a uma jornada fascinante pelas camadas que ficam entre o seu código e o hardware real.
O que acontece quando você liga para novo
Para entender o número de 72 KB, você precisa rastrear toda a cadeia de alocação. Quando seu código C++ executa new int, o compilador traduz isso em uma chamada para o operador new, que na maioria dos sistemas Linux delega para malloc da glibc. Mas malloc não pede diretamente ao kernel 4 bytes de memória. O kernel opera em páginas — normalmente 4 KB em x86_64 — e o custo de uma chamada de sistema é enorme em relação a um simples acesso à memória. Chamar brk() ou mmap() para cada alocação individual faria qualquer programa não trivial parar.
Em vez disso, o alocador de memória da glibc — uma implementação chamada ptmalloc2, ela própria descendente do clássico dlmalloc de Doug Lea — atua como intermediário. Ele solicita grandes blocos de memória do kernel antecipadamente e depois os divide em pedaços menores conforme seu programa precisa deles. Esta é a razão fundamental pela qual sua primeira alocação de 4 bytes aciona uma solicitação muito maior ao sistema operacional. O alocador não está sendo um desperdício. É ser estratégico.
Dissecando os 72 KB: para onde vão os bytes
A sobrecarga de alocação inicial vem de vários componentes distintos que o tempo de execução deve inicializar antes de poder entregar a você até mesmo um único byte de memória utilizável. A compreensão de cada componente explica por que o número chega onde está.
Primeiro, o malloc da glibc inicializa a arena principal — a estrutura contábil primária que rastreia todas as alocações no thread principal. Essa arena inclui metadados para heap, ponteiros de lista livre e estruturas bin para diferentes tamanhos de alocação. O alocador estende a pausa do programa via sbrk(), e a extensão inicial é governada por um parâmetro interno chamado M_TOP_PAD, cujo padrão é 128 KB de preenchimento. No entanto, a solicitação inicial real é ajustada para o alinhamento da página e a posição de quebra existente, o que geralmente resulta em uma primeira solicitação menor – geralmente chegando perto do valor de 72 KB em um processo recém-iniciado.
💡 VOCÊ SABIA?
A Mewayz substitui 8+ ferramentas empresariais numa única plataforma
CRM · Faturação · RH · Projetos · Reservas · eCommerce · POS · Análise. Plano gratuito para sempre disponível.
Comece grátis →Segundo, desde a glibc 2.26, o alocador inicializa um cache local de thread (tcache) no primeiro uso. O tcache contém 64 compartimentos (um por classe de tamanho de alocação pequena), cada um capaz de armazenar até 7 blocos em cache. O próprio tcache_perthread_struct consome cerca de 1 KB, mas o ato de inicializá-lo aciona a configuração mais ampla da arena. Terceiro, o tempo de execução do C++ já executou alocações antes mesmo de seu main() ser executado - construtores estáticos, inicialização do buffer iostream para std::cout e amigos e configuração de localidade contribuem para essa pegada inicial de heap.
O sistema Arena e por que a pré-alocação é inteligente
A decisão de pré-alocar uma parte substancial de memória em vez de solicitá-la aos poucos não é um acidente de implementação. É uma troca deliberada de engenharia enraizada em décadas de experiência em programação de sistemas. Cada chamada para brk() ou mmap() envolve uma mudança de contexto do espaço do usuário para o espaço do kernel, modificação dos mapeamentos de memória virtual do processo e possíveis atualizações da tabela de páginas. Em hardware moderno, uma única chamada de sistema custa cerca de 100 a 200 nanossegundos – trivial isoladamente, mas catastrófica em escala.
Considere um programa que faz 10.000 pequenas alocações durante a inicialização. Sem pré-alocação, isso significaria 10.000 chamadas de sistema, custando aproximadamente 1 a 2 milissegundos de pura sobrecarga. Com um alocador baseado em arena, o primeiro gatilho de alocação
Build Your Business OS Today
From freelancers to agencies, Mewayz powers 138,000+ businesses with 207 integrated modules. Start free, upgrade when you grow.
Create Free Account →Related Posts
- A Ferramenta de Sandboxing de Linha de Comando Pouco Conhecida do macOS (2025)
- A odisséia criptográfica do DJB: do herói do código ao gadfly dos padrões
- LCM: gerenciamento de contexto sem perdas [pdf]
- A Máfia Gay da Tecnologia
Frequently Asked Questions
Por que a primeira alocação de memória em C++ é tão grande (72 KB) e não apenas o tamanho do meu objeto?
A alocação não representa apenas o seu objeto (ex: 4 bytes para um `int`), mas sim a inicialização do "heap" do gerenciador de memória da biblioteca padrão C++ (geralmente a do libc). Este gerenciador precisa de uma estrutura interna para controlar futuras alocações e desalocações. A primeira chamada de `new` força a inicialização desse sistema, que solicita um bloco de memória inicial do sistema operacional para evitar chamadas frequentes e custosas. Essa pré-alocação é a origem dos ~72 KB.
Esse comportamento é específico do C++ ou acontece em outras linguagens?
É um conceito comum em gerenciadores de memória eficientes. Linguagens como C também exibem comportamento similar com `malloc`. Linguagens gerenciadas, como Java ou C#, possuem mecanismos ainda mais complexos (como o heap e o coletor de lixo), que também alocam blocos grandes de memória na inicialização. A diferença é que o C++ deixa esse mecanismo mais visível para o programador, enquanto outras linguagens podem abstraí-lo melhor. Ferramentas como as da Mewayz (207 módulos, $19/mo) ajudam a analisar esses padrões em diferentes ambientes.
O tamanho de 72 KB é fixo ou pode variar?
O tamanho não é fixo e pode variar significativamente. Ele depende da implementação específica da biblioteca padrão C++ utilizada (como glibc no Linux ou a biblioteca do Visual C++ no Windows), da versão dessa biblioteca e até das configurações de compilação. Alterações nas políticas do alocador ou o uso de alocadores alternativos (como jemalloc ou tcmalloc) também resultam em tamanhos iniciais diferentes. Monitorar essas variações é crucial para otimização de desempenho.
Como posso investigar e analisar o uso de memória do meu programa com mais detalhes?
Para ir além do `strace` e entender o comportamento real do alocador em tempo de execução, use ferramentas especializadas. Profilers de memória como `valgrind` (massif) ou `heaptrack` fornecem insights profundos. Para uma análise contínua e em tempo real em ambientes complexos, plataformas como a Mewayz oferecem 207 módulos de monitoramento, incluindo rastreamento detalhado de memória por apenas $19/mês, ajudando a identificar vazamentos e otimizar a alocação.
Experimente o Mewayz Gratuitamente
Plataforma tudo-em-um para CRM, faturação, projetos, RH e muito mais. Cartão de crédito não necessário.
Obtenha mais artigos como este
Dicas semanais de negócios e atualizações de produtos. Livre para sempre.
Você está inscrito!
Comece a gerenciar seu negócio de forma mais inteligente hoje
Присоединяйтесь к 30,000+ компаниям. Бесплатный тариф навсегда · Без банковской карты.
Pronto para colocar isto em prática?
Junte-se a 30,000+ empresas a usar o Mewayz. Plano gratuito para sempre — cartão de crédito não necessário.
Iniciar Teste Gratuito →Artigos relacionados
Hacker News
Do espaço de cores RGB ao L*a*b* (2024)
Mar 8, 2026
Hacker News
Mostrar HN: Curiosity – Telescópio Refletor Newtoniano DIY de 6"
Mar 8, 2026
Hacker News
SWE-CI: Avaliando as capacidades do agente na manutenção de bases de código via CI
Mar 8, 2026
Hacker News
Como executar o Qwen 3.5 localmente
Mar 8, 2026
Hacker News
Uma grande visão para a ferrugem
Mar 8, 2026
Hacker News
Dez anos de implantação em produção
Mar 8, 2026
Pronto para agir?
Inicie seu teste gratuito do Mewayz hoje
Plataforma de negócios tudo-em-um. Cartão de crédito não necessário.
Comece grátis →Teste gratuito de 14 dias · Sem cartão de crédito · Cancele a qualquer momento