Eu trabalhei bastante nisso e descrevi algumas delas aqui . Comparei o Boehm GC em C ++, alocando usando, malloc
mas não liberando, alocando e liberando usando free
e um GC de região de marca personalizado, escrito em C ++ all vs o GC de estoque da OCaml, executando um solucionador de n-rainhas baseado em lista. O GC do OCaml foi mais rápido em todos os casos. Os programas C ++ e OCaml foram escritos deliberadamente para executar as mesmas alocações na mesma ordem.
Obviamente, você pode reescrever os programas para resolver o problema usando apenas números inteiros de 64 bits e sem alocações. Embora mais rápido que isso derrotasse o objetivo do exercício (que era prever o desempenho de um novo algoritmo de GC, eu estava trabalhando usando um protótipo construído em C ++).
Passei muitos anos na indústria portando código C ++ real para idiomas gerenciados. Em quase todos os casos, observei melhorias substanciais no desempenho, muitas das quais provavelmente devido ao GC superando o gerenciamento manual de memória. A limitação prática não é o que pode ser alcançado em uma marca de microbench, mas o que pode ser realizado antes de um prazo e as linguagens baseadas em GC oferecem melhorias de produtividade tão grandes que eu nunca olhei para trás. Eu ainda uso C e C ++ em dispositivos incorporados (microcontroladores), mas mesmo isso está mudando agora.