Por que os alocadores de memória não retornam ativamente a memória liberada para o sistema operacional?

Sim, talvez seja a terceira vez que você vê esse código, porque eu fiz duas outras perguntas sobre ele (esta eesta) .. O código é bastante simples:

#include <vector>
int main() {
    std::vector<int> v;
}

Então eu o construo e executo com o Valgrind no Linux:

g++ test.cc && valgrind ./a.out
==8511== Memcheck, a memory error detector
...
==8511== HEAP SUMMARY:
==8511==     in use at exit: 72,704 bytes in 1 blocks
==8511==   total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==8511==
==8511== LEAK SUMMARY:
==8511==    definitely lost: 0 bytes in 0 blocks
==8511==    indirectly lost: 0 bytes in 0 blocks
==8511==      possibly lost: 0 bytes in 0 blocks
==8511==    still reachable: 72,704 bytes in 1 blocks
==8511==         suppressed: 0 bytes in 0 blocks
...
==8511== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Aqui, Valgrind relata que não há vazamento de memória, embora haja 1 alocação e 0 livres.

A respostaaqui ressalta que o alocador usado pela biblioteca padrão C ++ não retorna necessariamente a memória de volta ao sistema operacional - pode mantê-los em um cache interno.

Questão é:

1) Por que mantê-los em um cache interno? Se é para velocidade,quão é mais rápido? Sim, o sistema operacional precisa manter uma estrutura de dados para controlar a alocação de memória, mas isso também é necessário pelo mantenedor desse cache.

2) Como isso é implementado? Porque meu programaa.out já termina, não há outro processo que esteja mantendo esse cache de memória - ou existe algum?

Edit: for question (2) - Algumas respostas que eu vi sugerem "C ++ runtime", o que isso significa? Se "C ++ runtime" for a biblioteca C ++, mas a biblioteca for apenas um monte de código de máquina no disco, não será um processo em execução - o código da máquina está vinculado ao meua.out (biblioteca estática,.a) ou é chamado durante o tempo de execução (objetos compartilhados,.so) no processo dea.out.

questionAnswers(1)

yourAnswerToTheQuestion