delete释放new分配的动态内存,释放过程耗时很长,肿么办?

teleinfor 2016-10-31 02:37:55
处理数据new分配了大量的buffer,总计大概100GB大小,数量数以亿计。最后用完之后我要释放这些内存,结果发现for循环释放完所有的buffer居然要花费几十分钟。。。。

效率这么低下么?还是说我用法哪里有问题???
...全文
561 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
teleinfor 2016-11-28
  • 打赏
  • 举报
回复
多谢楼上几位解答。
赵4老师 2016-11-01
  • 打赏
  • 举报
回复
容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储 当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
paschen 版主 2016-10-31
  • 打赏
  • 举报
回复
搞个内存池,一次性申请足够大的内存来分配,释放时也只用一次性统一释放
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
100GB,你是什么计算机啊。 我建议你把需要使用动态内存的业务逻辑单独搞一个进程, 处理完直接把进程kill掉, 因为进程申请的内存会由操作系统负责释放
我们1999年的RS/6000服务器都有64GB内存。 不过他“循环释放完所有的buffer居然要花费几十分钟”也太夸张了,估计是交换到磁盘的缘故。
  • 打赏
  • 举报
回复
不要累计那么多,最好到没有用的时候就delete,你内存申请太多肯定跑不动了的
AlbertS 2016-10-31
  • 打赏
  • 举报
回复
你是分着申请的吧,这样处理起来比较慢,你可以尝试一次申请大块内存,把原来的每次申请改为每次从自己申请的内存中去取,也就是内存池的概念,你可以了解一下
ipqtjmqj 2016-10-31
  • 打赏
  • 举报
回复
100GB,你是什么计算机啊。 我建议你把需要使用动态内存的业务逻辑单独搞一个进程, 处理完直接把进程kill掉, 因为进程申请的内存会由操作系统负责释放

64,654

社区成员

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

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