我正在使用大约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(),但这似乎更慢了。想法?