c++ - x64 处理器上的 32 位进程内存泄漏

标签 c++ memory memory-management memory-leaks 32bit-64bit

我制作了一个始终在 x64 机器上运行的 32 位 c++ 程序。一个客户说运行这个进程的 5 个实例正在使用导致他们所有的 24 GB RAM 被使用。

我会立即认为存在内存泄漏,但我无法重现此内存问题。

对我发现的内存分配进行更多研究 Memory Limits for Windows .这告诉我操作系统不允许 32 位进程超过 2 GB 的内存。

64 位 Windows 上的 32 位应用程序是否有可能使用超过 2 GB 的内存泄漏?

附言终止进程会使内存恢复到正常运行水平(大约 2 GB)。

[编辑] 我现在看到大部分正在使用的内存是内核内存:非分页。这是否意味着正在使用某些系统资源而不是内存泄漏?

[更新] 问题不是驱动程序或内存泄漏。这似乎是进程句柄泄漏。有些东西不断地开始新的文件句柄。这是使用 perfmon 监控进程时发现的。根据经验,如果一个进程有超过 2000 到 3000 个句柄,您应该进行调查。特别是如果这个数字每隔几秒就增加一次。

最佳答案

Memory Limits for Windows 中所述,在设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE 的情况下,64 位系统上 32 位进程的限制为 4 GB,因此您的 5 个进程总共可以消耗 20 GB 的内存。这可以通过 LARGEADDRESSAWARE 设置扩展虚拟地址空间的选项。

关于c++ - x64 处理器上的 32 位进程内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455589/

相关文章:

c++ - 为什么我的代码会崩溃?

c++ - 将函数指针传递给一个函数,该函数通过引用获取另一个函数

iphone - 消除由于返回创建的变量而导致的内存泄漏

c - 在struct中使用__attribute__((aligned())),为什么sizeof的结果是这样?

C - 类型名称 : Number?

c# - 创建 native DLL

C++可视化变量的内存

java - 静态变量的内存范围

c++ - c++链表不再占用Ram空间?

c++ - 将非模板基类向下转换为模板化派生类 : is it possible?