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