【发布时间】:2011-03-15 19:06:18
【问题描述】:
在 Linux 下的 C/C++ 中,我需要分配一个大(数 GB)内存块,以便存储来自连接到以太网端口的传感器的实时数据和大约 110MB/s 的流数据。我想分配尽可能多的内存,以最大化我可以存储的数据序列的长度。但是,我还需要确保不会发生磁盘交换,因为由此产生的磁盘访问延迟和有限带宽会导致传感器(非常有限)的缓冲区溢出。
确定要分配多少内存的最佳方法是什么?我是否仅限于分配比报告的可用内存略小的块,还是可以更直接地与 linux 虚拟内存管理器交互?
【问题讨论】:
-
纯粹出于兴趣,您使用的是什么传感器?
-
@Space_C0wb0y:这不是真的。
-
获得更好的传感器。或切换到适当的实时操作系统。虚拟内存操作系统不会让你做你想做的事,除非你做一些奇怪的事情,比如使用 ram 磁盘作为交换空间。我在 IDE 接口的另一侧看到了 4GB 以上的 RAM。适当供电的 RAM。非常快。对于颠覆基于虚拟内存的操作系统并将其全部缓存在 RAM 中非常有用。
-
@Chris Becke:Linux 不会强迫你做任何奇怪的事情来使缓冲区不可交换。有一个简单的系统调用可以将它们锁定到物理内存中,或者如果需要,您可以将系统配置为完全没有交换磁盘。而且我发现它的实时行为对于几毫秒或更长时间的实时约束非常令人满意。
标签: c++ c linux virtual-memory