Hola a todos, estoy con un programa sencillo en el que creas 100.000 alumnos con nombre y edad y luego los borras todos para liberar toda la memoria posible. Este es el programa:
Main.cpp
Código:
#include <stdio.h>
#include <stdlib.h>
#include "Alumno.h"
int main(){
system("PAUSE");
const int objetos = 100000;
Alumno *alumnos[objetos];
CString nombre = "Carmelo";
int i;
//Creo los 100.000 alumnos
for (i = 0; i < objetos; i++){
alumnos[i] = new Alumno();
alumnos[i]->setNombre(nombre);
alumnos[i]->setEdad(20);
printf("La edad de %s es: %d\n", alumnos[i]->getNombre().Get(), alumnos[i]->getEdad());
}
system("PAUSE");
//Borro los 100.000 alumnos y el array que los contenía.
for (i = 0; i < objetos; i++){
SAFE_DELETE(alumnos[i]);
}
SAFE_DELETE_ARRAY(*alumnos);
system("PAUSE");
}
Alumno.h
Código:
#include "CString.h"
#define SAFE_DELETE(memory) { delete memory; memory = nullptr; }
#define SAFE_DELETE_ARRAY(memory) if(memory) { delete [] memory; memory = nullptr; }
class Alumno
{
private:
int edad;
CString nombre;
public:
void setNombre(CString nombre){ this->nombre = nombre; };
CString getNombre(){ return nombre; };
void setEdad(int edad){ this->edad = edad; };
int getEdad(){ return edad; };
};
Con el administrador de tareas de Windows puedo comprobar la memoria usada en cada momento, y esto es lo que sucede:
Al iniciar el programa usa 1160KB de memoria.
Al crear los 100.000 alumnos usa 5240KB de memoria.
Al borrar todos los alumnos usa 1576KB de memoria.
Se supone (o al menos creo yo) que al liberar toda la memoria de los alumnos el programa debería usar la misma memoria que al iniciar el programa, pero al parecer usa más memoria al final que al principio: 1160KB al principio < 1576KB al final.
¿Esto es normal? ¿O hay alguna forma de liberar esa memoria restante?
Gracias!!