gpt4 book ai didi

delphi - 对于高容量记录器应用程序使用什么分配方法?

转载 作者:行者123 更新时间:2023-12-03 15:12:00 26 4
gpt4 key购买 nike

我正在使用 Delphi 开发记录器/嗅探器。在操作过程中,我会获取大量数据,这些数据在压力操作期间会累积到大约 3 GB 的数据。在某些计算机上,当我们达到这些级别时,应用程序将停止运行,有时会引发异常。

目前我正在使用 GetMem 函数为每条消息分配指针。

是否有更好的方法来分配内存,以便最大限度地减少失败的可能性?请记住,我无法将大小限制为硬性限制。

您对使用 HeapAlloc、VirtualAlloc 甚至映射文件有何看法?哪个会更好?

谢谢。

最佳答案

您的根本问题是 32 位进程的 4GB 硬地址空间限制。由于您在 3GB 时遇到问题,我只能假设您正在使用在 64 位 Windows 或 32 位 Windows 上运行的 /LARGEADDRESSAWARE 以及/3GB 启动开关。

我认为您有几个选择,包括但不限于以下内容:

  1. 使用更少的内存。也许您可以处理更小的 block 或将一些内存推送到磁盘。
  2. 使用 64 位 Delphi(刚刚发布)或 FreePascal。这使您摆脱了地址空间限制,但将您限制为 64 位版本的 Windows。
  3. 使用内存映射文件。在具有大量内存的计算机上,这是访问操作系统内存缓存的一种方法。内存映射文件不适合胆小的人。

我无法就解决方案给出明确的建议,因为我不了解您的架构,但根据我的经验,减少内存占用通常是最好的解决方案。

使用不同的分配器可能没有什么区别。是的,确实有低碎片分配器,但它们肯定不会真正解决您的问题。他们所能做的就是稍微降低它发生的可能性。

关于delphi - 对于高容量记录器应用程序使用什么分配方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391954/

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