0

我正在编写一个程序,它使用 mmap 文件来保存一个巨大的缓冲区,该缓冲区组织为一个 64 MB 块的数组。

这些块用于聚合通过网络从不同主机接收到的数据。因此,预先不知道写入每个块中的总数据大小。大多数时候它只有 2MB,但在某些情况下可以达到 20MB 或更多。

数据不会在缓冲区中停留很长时间。不到一秒钟后,90% 被删除,其余的被传输到另一台主机。

我想知道是否有办法告诉虚拟内存管理器在删除数据时内存页面不再脏。

当使用和释放块来控制虚拟内存时,我应该使用 mmap 和 munmap 吗?这样做的开销是多少?此外,一些同事对分配如此大的 mmap 空间对性能的影响表示担忧。我希望它表现得像一个交换文件,因此只考虑脏页。

4

1 回答 1

0

mmap / munmap 应该可以解决问题。请注意,修改页表可能具有不可忽略的开销,并且可能涉及 TLB 缓存刷新,因此您可能希望汇总这些更改而不是太频繁地执行它们。

分配大内存空间会消耗页表条目。只要您没有触摸页面,它就不会真正分配。

于 2012-10-29T14:55:50.537 回答