为什么我delete后内存没有被释放?

连接:http://bbs.51cto.com/thread-851025-1-1.html

亲身经历,觉得很奇怪,所以查了下这个问题

struct List {

HBufC* aPath;
List* next;
};
我用的是链表,
List* p;
List* pp = head;
for(TInt i = 0; i < iIndex + iPos - 1; i ++) {
pp = pp->next;
while(Info.Count() > iIndex + iPos) {
p = pp->next;
pp->next = p->next;
delete p->aPath;
delete p;
        }
}
删除了1000多个,加起来至少得几百K了吧,可程序占用的内存并没有丝毫的减少,程序退出后内存倒是释放了

回答一:
1.没看到你对结构体成员进行内存分配。
2.内存应该有区块分配/回收机制,不到一定的粒度可能看不出变化。

回答二:
malloc申请的内存都不是内存管理的一等公民.
在Win和Linux(Unix-Like)上面,malloc申请的都是堆上的内存,而堆是C运行库向OS申请的.
那么你free的内存也就是堆上的,应用占用的内存不会有明显改变,除非到一定程度那个堆被释放了.
delete是靠free实现的.


回答三:
LZ的情况正常,要不容易整理内存碎片
那样的话,效率会很差
系统一般都是以页为单位分配,便于管理
你申请的地址,系统都有记载,但系统很少回读这些表内的内存现在状态或者说去整理碎片
所以就会一厢情愿认为你delete的内容在使用,
即使他已经被标记了未使用,放在相应的内存情况表
但当内存不足(或达到一定的情况)时,他就会适当的回读下,整理下内存碎片
(但如果现在情况不会引起内存危机,他一般是不会回读整理内存碎片的)
个人观点


回答四:
等堆被释放了,占用内存大小才会有显著的变化.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值