Мне нужна помощь в понимании проблем с распределением и освобождением памяти в Windows. Я использую VS11-компилятор (VS2012 IDE) с последним обновлением на данный момент (Update 3 RC).C++ delete не освобождает всю память (Windows)
Проблема в следующем: я динамически выделяю память для двумерного массива и немедленно освобождая его. Тем не менее, до выделения памяти, мое использование памяти процесса составляет 0,3 МБ до выделения, при выделении 259,6 МБ (ожидается, что выделено 32768 массивов из 64-битных int (8 байтов)), 4106,8 МБ во время распределения, но после память освобождения не падает до ожидаемого 0,3 МБ, но застряла на 12,7 МБ. Поскольку я освобождаю всю память кучи, которую я взял, я ожидал, что память вернется к 0,3 МБ.
Это код в C++ Я использую:
#include <iostream>
#define SIZE 32768
int main(int argc, char* argv[]) {
std::getchar();
int ** p_p_dynamic2d = new int*[SIZE];
for(int i=0; i<SIZE; i++){
p_p_dynamic2d[i] = new int[SIZE];
}
std::getchar();
for(int i=0; i<SIZE; i++){
for(int j=0; j<SIZE; j++){
p_p_dynamic2d[i][j] = j+i;
}
}
std::getchar();
for(int i=0; i<SIZE; i++) {
delete [] p_p_dynamic2d[i];
}
delete [] p_p_dynamic2d;
std::getchar();
return 0;
}
Как вы решаете, что память не выпущена? Если вы используете диспетчер задач, вы получите ложную картину. Если вы запускаете отладку, вы получаете сообщение об утечке памяти? –
Нет, Роджер, я использовал ТМ. Спасибо. – user2467906