[lunc@kain temp]$ cat mem_allocs_stat
0 malloc(1136) called from 0x400b2e9e returns 0x805efe80 // выделение памяти для строки
1 malloc(320) called from 0x400b2e9e returns 0x805f4600 // ????
2 malloc(1136) called from 0x400b2e9e returns 0x805f5a80
3 malloc(1136) called from 0x400b2e9e returns 0x805fa200
4 malloc(1136) called from 0x400b2e9e returns 0x805fe980
5 malloc(1136) called from 0x400b2e9e returns 0x80603100
6 malloc(1304) called from 0x400b2e9e returns 0x80607880 // ????
7 malloc(1136) called from 0x400b2e9e returns 0x8060ca80
8 malloc(1136) called from 0x400b2e9e returns 0x80611200
9 malloc(1136) called from 0x400b2e9e returns 0x80615980
10 malloc(1136) called from 0x400b2e9e returns 0x8061a100
11 malloc(1136) called from 0x400b2e9e returns 0x8061e880
free(0x805efe80) called form 0x400b1983
free(0x805f5a80) called form 0x400b1983
free(0x805fa200) called form 0x400b1983
free(0x805fe980) called form 0x400b1983
free(0x80603100) called form 0x400b1983
free(0x8060ca80) called form 0x400b1983
free(0x80611200) called form 0x400b1983
free(0x80615980) called form 0x400b1983
free(0x8061a100) called form 0x400b1983
free(0x8061e880) called form 0x400b1983
Итого потреянно 1624 байта. Если сделать около 100 итреаций получится порядка 7Kb (добавляется еще одна аллокация, которая потом не освобождается).
Такое поведение возникает только при использовании push_back() (если создать вектор заранее с заданным размером, а потом пихать в него элементы -- память освободится полностью). С list та же история -- только аллокации другие.
Может быть я не правильно хуки поставил. Использовал mtrace: