c++牛人遇到的内存有关问题,有兴趣参加讨论

c++牛人遇到的内存问题,有兴趣参加讨论
//一个简单的类
class Caa
{
public:
int *mem;
};

void main()
{
       //申请内存,发现内存增长
vector<Caa*> vec;
for(int i =0; i < 100000; i++)
{
Caa *aa = new Caa;
aa->mem = new int;
vec.push_back(aa);
}
      //释放类成员变量,内存未发生变化
for(int i =0; i < 100000; i++)
{
Caa *aa = vec[i];
delete aa->mem;
}

     //释放对象变量,所有内存释放干净,没有泄露
for(int i =0; i < 100000; i++)
{
Caa *aa = vec[i];
delete aa;
}

return 0;
}
上面注释是观察的现象,不清楚为什么独自释放成员变量指针的时候没有发生内存变化。
猜测是这一块内存只是作了标记为已删除(可能是避免重复申请操作,可以再次使用),但不释放给系统。只有在类对象(new出来的对象)周期结束的时候才会回收给系统。
各位大侠有什么高见,还望不吝赐教阿。
测试环境:win7, visual studio 2008
C++ 成员 指针 内存

------解决方案--------------------
这样试试:
class Caa
{
public:
int *mem;
};

void main()
{
       //申请内存,发现内存增长
vector<Caa*> vec;
for(int i =0; i < 100000; i++)
{
Caa *aa = new Caa;
aa->mem = new int[1024];
vec.push_back(aa);
}
      //释放类成员变量,内存未发生变化
for(int i =0; i < 100000; i++)
{
Caa *aa = vec[i];
delete [] aa->mem;
}

     //释放对象变量,所有内存释放干净,没有泄露
for(int i =0; i < 100000; i++)
{
Caa *aa = vec[i];
delete aa;
}

return 0;
}

------解决方案--------------------
你的内存是交叉申请的, 然后你第一次释放的时候是间隔一个释放一个, 释放完后全是碎片化的内存, 空闲区域并不连续, 没法归还给系统.
向系统申请释放都是整块整块的进行的. 你第一次释放后, 没有一块内存是完全空闲的.