gpt4 book ai didi

c++ - 检查系统中的可用内存以进行新分配

转载 作者:行者123 更新时间:2023-11-28 00:28:59 25 4
gpt4 key购买 nike

我正在使用 Windows C++ 应用程序处理点云。我们将 PCL 库与 QtOpenSceneGraph 一起使用。计算机有 4 GB 的 RAM。

如果我们加载很多点(例如,40 个点云总共有大约 8 亿个点),系统就会崩溃。

该应用程序几乎没有响应(需要很长时间才能在它周围移动鼠标并且箭头变为一个不断旋转的圆圈)并且在任务管理器的性能选项卡中,我得到了这个输出:

内存(图片中的 1): 增加到 3.97 GB,几乎是系统的总容量。

免费(图中2个): 0

Windos task admin

我检查了这个帖子:herehere使用 MEMORYSTATUSEX 版本,我得到了内存信息。

这里的想法是,在加载更多云之前,检查可用内存。如果我们要加载的云的“重量”大于可用内存,则不要加载它,这样应用程序就不会卡住,并且用户有机会删除较旧的云以释放一些内存。值得注意的是,没有抛出任何异常,我遇到的最糟糕的情况是 Windows 在内存不足时自行终止了应用程序。

现在,这是个好主意吗?有规范的方法来处理这件事吗?

我很高兴听到您对此事的看法。

最佳答案

您的观点与解决类似问题的通常方法不同。

通常,人们可能会分配然后尝试在物理内存中锁定他们需要的空间。 (POSIX 中的 mlock(),WinAPI 中的 VirtualLock())。原因是即使系统此时有足够的可用物理内存,其他一些进程可能会在下一刻产生并将您的驻留集的一部分插入交换空间。

这将要求您使用自定义分配器并确保您的进程有权锁定所需数量的页面。

阅读此处开始:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366895(v=vs.85).aspx

关于c++ - 检查系统中的可用内存以进行新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23683742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com