关于大缓存的疑惑, 分不够...

hacqing 2011-12-21 02:56:14

/*
今天查看程序消耗的内存大小情况, 看到它一直在递增, 4k/s的样子的速度.
第一反应就是内存泄漏了, 查了好久, 正确释放, 那又是什么情况呢? 我把注意力
转向了我分配的一块1<<24大小的缓存, 当程序运行一段时间后, 占用内存大小稳定
了.
这是个什么情况呢? 求解.

*/
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-12-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hacqing 的回复:]
qq linux呢?
[/Quote]
用top命令?
hacqing 2011-12-22
  • 打赏
  • 举报
回复

qq linux呢?
hacqing 2011-12-21
  • 打赏
  • 举报
回复


谢谢楼上的几位的回答, 我在程序开始的地方就使用new char[1<<24];了, 也就是分配一大块内存来使用, 但是就是在一段时间内它以4kb/s的速度增加, 持续一段时间后就不递增了, 使用的内存就稳定下来了, 不知道这是什么情况.
一叶之舟 2011-12-21
  • 打赏
  • 举报
回复
明显泄露,内存的泄露代码中看起来是正确释放的,实际上并不一定
如:
char *p=new char[4096];
//....1..

//....2..
delete []p;
如果在
//....1..

//....2..
中发生异常,p永远也释放不了。
赵4老师 2011-12-21
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
yisikaipu 2011-12-21
  • 打赏
  • 举报
回复
栈内存?

// win7x64/vs2008 release 非优化
int dep;

int func()
{
Sleep(1000);

char ch[4096]; // 每次调拨4k

++dep;

if(dep>60)
return 1;
else
return func();
}

int main()
{
char ch[40960]; // 占据已调拨的40k先
func();

return 0;
}
herocxgood 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 m11668700 的回复:]

泄露了呗~
[/Quote]
+很有可能
晓馨嫣梓 2011-12-21
  • 打赏
  • 举报
回复
泄露了呗~

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧