Я сделал простой тест, когда я помещаю некоторые данные в std :: map и затем вызываю std :: map :: clear ().
typedef std::map<int, unit_t,std::less<int>,
my_allocator<std::pair<const int, unit_t>, 4 > > contaner_t;
contaner_t keys;
keys[1] = 10;
keys[2] = 20;
keys[3] = 30;
keys.clear();
это результат printf, вставленный в мой тест:
Allocator # 4, Memory consumption: 56 (allocated : 56)
Allocator # 4, Memory consumption: 112 (allocated : 56)
Allocator # 4, Memory consumption: 168 (allocated : 56)
Allocator # 4, Memory consumption: 112 (deallocated : 56),
Allocator # 4, Memory consumption: 56 (deallocated : 56),
Allocator # 4, Memory consumption: 0 (deallocated : 56),
Я думаю, что вам, вероятно, следует также проверить свое поведение распределителя, но я думаю, что ваш стандартный std :: allocator фактически освобождает память, как вы ожидаете, но эта память не возвращается в ОС. Кстати, какую ОС вы используете?
Вопрос здесь в том, как вы измеряете can't seem to free the memory back to the OS.
и как вы можете быть уверены, что I could force it to free by doing a swap with an empty std::vector.
Вы действительно уверены, что выделенная память фактически возвращается к ОС?