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
Присоединяйтесь к 6,210+ компаниям. Бесплатный тариф навсегда · Без банковской карты.
Pronto para colocar isto em prática?
Junte-se a 6,210+ 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
Postagem bêbada: coisas que aprendi como engenheiro sênior
Apr 22, 2026
Hacker News
Crescimento global em energia solar “o maior já observado para qualquer fonte”
Apr 22, 2026
Hacker News
Estou farto de IA em tudo
Apr 22, 2026
Hacker News
O mistério no armário de remédios: paracetamol, ibuprofeno e o que saber
Apr 22, 2026
Hacker News
Os aluguéis de San Diego caíram em mais de 19 dos 20 principais mercados dos EUA após aumento na oferta
Apr 22, 2026
Hacker News
Windows Server 2025 funciona melhor em ARM
Apr 22, 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