首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同行为的马洛和自由?

不同行为的马洛和自由?
EN

Stack Overflow用户
提问于 2017-10-01 12:48:49
回答 3查看 327关注 0票数 1

我有一个用C++实现的树。

当我运行创建树的代码并使用malloc()插入大约5,000,000 int键时,当我使用Visual 2013运行时,它将使用类似于200 as的(如任务管理器所示)。

当我在每个节点上使用free()释放树时,它将返回到0.5MB的周围。到现在为止一切都还好。

现在,当我使用cygwin编译和运行Visual时,树的大小就像80 in (这是可以的,因为visual Studio添加了调试信息和其他东西),,但是当我释放树时,它的大小没有任何变化!

简单地说:在Visual中运行释放树时,将程序的大小返回到原始大小0.5MB,但是当我在Visual之外编译和运行相同的代码(使用cygwin)时,释放树不会从程序大小(仍然是80 of )中改变任何东西。

那为什么会发生这种事?

更新

释放树后,我尝试再次在树中插入相同的5,000,000 int键。在cygwin的情况下,它没有使用额外的内存,即相同的80 to,这意味着,正如反馈所指出的(谢谢各位+1),内存被释放了,但没有返回到操作系统。

现在的问题是:--如果我有大量内存分配,当释放的时候,我不喜欢把这个空闲的区域保留在程序中。那么,我如何让强制 cygwin将其返回到操作系统呢?

EN

Stack Overflow用户

发布于 2017-10-01 12:54:04

不同的恶意行为是不同的。Microsoft可以使用原始堆分配和释放项。

看起来MS在直接原始堆(HeapAlloc/HeapFree)上使用内存。

但是cygwin使用的是本地托管内存系统。

这意味着通过HeapAlloc / HeapFree释放内存将返回给操作系统,并释放相关资源。

在cygwin上自由调用,将返回要重用的内存,但不会将其返回给操作系统。

管理大量内存

如果您有大量需要处理的内存,那么您最好直接管理它们,方法是迭代操作系统,并调用它的基本函数。例如,在Windows上,您可以调用HeapCreate来创建一个单独的堆,并使用HeapAlloc在该单独的大型块分配中分配,用HeapFree释放它们。

当您完成该块时,可以使用HeapDestroy释放所有内存。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46512510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档