A empresa Google nova versão do sistema de alocação de memória , que é utilizado em muitos projetos internos do Google. O código do TCMalloc está escrito em C++ e sob licença Apache. Para funcionar, é necessário um compilador que suporte C++17 para a linguagem C++ e C11 para a linguagem C (gcc 9.2+ ou clang 9.0+). Das sistemas operacionais somente Linux (x86, PPC).
É notável que desde 2005 exista outra versão do tcmalloc, que como parte do pacote (Google Performance Tools). Esses são dois projetos que têm raízes comuns. O novo TCMalloc é mais uma tentativa de abrir o código dos esforços internos atuais do Google, mas ainda não tem como foco oferecer um ABI estável e suporte de uma ampla gama de sistemas operacionais. O suporte ao antigo tcmalloc do gperftools será continuado, mas novas funcionalidades, como a ligação do cache ao CPU, não estão previstas para serem incorporadas.
O TCMalloc inclui a implementação da função malloc() de C e do operador 'new' de C++, otimizados para alcançar alto desempenho e aplicação em aplicativos multithread. O TCMalloc também oferece recursos de introspecção e perfilamento, permitindo que o aplicativo obtenha informações detalhadas sobre o uso de memória no heap. O código utiliza otimizações baseadas nas modernas capacidades da linguagem C++, como
o operador delete com do C++14 e a alocação de memória com do C++17.
TCMalloc é composto por três componentes: um front-end com cache para rápida alocação e liberação de memória, uma camada para preencher o cache do front-end e um back-end que realiza operações como obter memória do sistema operacional, gerenciar grandes blocos de memória não utilizada e devolver memória extra ao SO. O cache é livre de bloqueios e opera vinculado aos núcleos da CPU, mas recua para um modelo de cache vinculado a threads caso a funcionalidade necessária não esteja disponível no núcleo do SO (o vínculo de cache ao CPU funciona apenas em núcleos Linux recentes). O back-end suporta operações tanto com páginas de memória normais quanto com páginas de tamanho aumentado (hugepage).
Principais características do TCMalloc:
- Alocação e liberação rápida de memória usando cache. A maioria das operações de alocação de memória não requer bloqueio, o que garante boa escalabilidade para aplicativos multithread com alta paralelização de tarefas;
- Uso flexível de memória, permitindo reutilizar áreas de memória liberadas para objetos de tamanhos variados ou retornar a memória ao sistema operacional;
- Baixo overhead por objeto devido à alocação de páginas de objetos de tamanho uniforme e representação eficiente de pequenos objetos. Suportadas páginas lógicas com tamanhos de 4KiB, 8KiB, 32KiB e 256KiB. Por exemplo, ao solicitar blocos de 512 bytes de memória, uma página inteira de 4KiB será alocada para objetos de 512 bytes, na qual poderão caber 8 desses objetos;
- É possível afinar os parâmetros por meio da definição do tamanho do cache e das configurações de intensidade de devolução da memória ao SO;
- Fornecimento de informações detalhadas para análise do uso de memória pelo aplicativo.
Fonte: opennet.ru
