0

我使用的是大约 2007 年夏季推出的 MacBook Pro (x86-64),配备 32KB L1(我认为)、4MB L2 和 4GB RAM;我正在运行 OS X 10.6.8。

我正在用 C++ 编写标准的基数排序:它在排序时从一个数组复制到另一个数组并再次返回(因此使用的内存是数组大小的两倍)。我通过打印一个“。”来观看它。每百万个条目移动。

如果数组最多为 750 MB,那么这些点通常移动得很快;但是,如果数组更大,那么整个过程就会停止。如果我以块为单位对 512 MB 进行基数排序,然后尝试对这些块进行合并排序,则第一个块运行得很快,然后进程再次爬入停止。也就是说,我的进程似乎只能使用 1.5 GB 的 RAM 进行排序。奇怪的是我有 4 GB 的物理 RAM。

我尝试分配一个 8 GB 数组并遍历它写入每个字节并打印一个“。” 每百万字节;当我知道它必须进入磁盘时,似乎一切都开始减慢 1.5 GB 并保持在该速度甚至超过 4 GB;因此操作系统开始将页面写入大约 1.5 GB 的磁盘。

我想用我的机器对大数组进行排序。我如何告诉我的操作系统至少给我的进程提供 3.5 GB 的 RAM ?我尝试使用 mlock(),但这似乎让事情变得更加缓慢。想法?

4

0 回答 0