我最好为我的进程保留内存吗?
Posted
技术标签:
【中文标题】我最好为我的进程保留内存吗?【英文标题】:Had I better to reserve memory for my process? 【发布时间】:2016-07-20 09:12:36 【问题描述】:我编写了一个处理文件的程序。在空闲状态下,进程占用的内存约为 60 MB。定期,比如每 2 分钟,该进程分配内存(约 40 MB),对文件执行一些操作,然后释放分配的内存。该过程大约需要 10 到 20 秒。结果,我的进程的内存使用情况如下图所示:
我的问题是:我应该提前保留一些内存,然后在需要时使用这些内存吗?这将使内存使用趋势更加稳定。 而且系统稳定性会更好,对吗?
【问题讨论】:
只是出于好奇:您为什么担心内存使用趋势? 分配和释放大约 40MB 的 RAM 的时间最多不太可能超过几毫秒,并且可能不会显着提高您的性能。您希望通过这样做实现什么目标? @tobi303 我的意思是内存使用脉冲对操作系统有好处吗? @Rotem 首先我分配内存(~40 MB)并将内存用作处理文件的缓冲区。完成处理文件通常需要约 20 秒(或更长时间)。 通常您在代码中分配的内存与您在任务管理器中看到的内存使用量并不直接对应。实际上,我对这些扭结感到有些惊讶。也可能是操作系统仅在您的程序完成时才释放内存。我不会过多关注您在任务管理器中看到的内容,但如果您真的想研究程序的内存使用情况,您可以使用其他诊断工具。 【参考方案1】:不,如果您这样做,任何 21 世纪的操作系统都不会眨眼。如果您尝试在 100 个 CPU 内核上分配超过 4GB/毫秒的空间,事情可能会变得有趣,但您甚至还没有接近。
【讨论】:
100 个 CPU 内核?我想要你的电脑。【参考方案2】:如果您提前分配内存,如您所说的那样额外分配 50MB,那么图表将是一条直线(即稳定),但竞争内存的程序可能无法获得足够的内存,并且会因此受到影响。
【讨论】:
以上是关于我最好为我的进程保留内存吗?的主要内容,如果未能解决你的问题,请参考以下文章
最好的方式是用VirtualAlloc分配虚拟内存,它既不是在堆也不是在栈,而是直接在进程的地址空间中保留一块内存