delphi – 用于高容量记录器应用程序的分配方法是什么?

我正在使用Delphi开发一个记录器/嗅探器.在操作期间,我得到了大量的数据,这些数据可以在压力操作期间累积到大约3 GB的数据.
在某些计算机上,当我们到达这些级别时,应用程序停止运行,有时会抛出异常.

目前我正在使用GetMem函数来分配指向每条消息的指针.

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

您如何看待使用HeapAlloc,VirtualAlloc甚至是映射文件?哪个更好?

谢谢.

解决方法

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

我想你有几个选择,包括但不限于以下内容:

>使用更少的内存.也许您可以处理较小的块或将一些内存推送到磁盘.
>使用64位Delphi(刚刚发布)或FreePascal.这可以减轻地址空间约束,但会限制您使用64位版本的Windows.
>使用内存映射文件.在具有大量内存的计算机上,这是一种访问OS内存缓存的方法.内存映射文件不适合胆小的人.

由于我不了解您的架构,我无法明确建议解决方案,但根据我的经验,减少内存占用通常是最佳解决方案.

使用不同的分配器可能没什么区别.是的,确实存在低碎片分配器,但它们肯定不会真正解决您的问题.他们所能做的只是让它不太可能出现.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...