我正在使用Delphi开发记录器/嗅探器。在操作期间,我得到了大量的数据,这些数据可以在压力操作期间累积到大约3 GB的数据。 在某些计算机上,当我们达到这些级别时,应用程序停止运行,有时会抛出异常。
目前我正在使用GetMem函数为每条消息分配指针。
有没有更好的方法来分配内存,以便最大限度地减少失败的可能性?请记住,我无法将大小限制为硬限制。
您如何看待使用HeapAlloc,VirtualAlloc甚至是映射文件?哪个更好?
谢谢。
答案 0 :(得分:5)
您的基本问题是32位进程的硬地址空间限制为4GB。由于您遇到的问题是3GB,我只能假设您使用的是运行在64位Windows上的/LARGEADDRESSAWARE
或使用/ 3GB启动开关的32位Windows。
我认为您有一些选择,包括但不限于以下内容:
由于我不了解您的架构,我无法明确建议解决方案,但根据我的经验,减少内存占用通常是最佳解决方案。
使用不同的分配器可能没什么区别。是的,确实存在低碎片分配器,但它们肯定不会真正解决您的问题。他们所能做的只是让它不太可能出现。