Почему Mac OS X перемещает память процесса для подкачки, даже если ОЗУ доступно? - PullRequest
2 голосов
/ 21 октября 2011

Я использую Mac с 8 ГБ оперативной памяти под управлением Mac OS X 10.7.2.Я написал эту небольшую программу для выделения около 6 ГБ ОЗУ:

#include<iostream>
#include<vector>

int main() {
    std::vector<char> vec;
    vec.resize(6442450944);
    std::cerr << "finished memory allocation\n";
    char c;
    std::cin >> c;
}

Когда я запускаю программу, в какой-то момент программа больше не получает реальную память, а вместо этого выделяется пространство подкачки.Даже контент, уже записанный в ОЗУ, перемещается в SWAP.Когда я запускаю

./memtest & FOO=$! && while true; do ps -orss -p $FOO | tail -n1; sleep 0.2s; done

, я получаю следующий вывод:

     4
524296
1052740
1574188
2024272
2493552
2988396
3481148
3981252
4484076
4980016
5420580 <= from here on, RSS goes down
5407772
5301416
5211060
5163212
5118716
5081816
5039548
4981152
4897772
4822260
4771412
4715036
4666308
4598596
4542028
4521976
4479732
4399104
4312240
4225252
finished memory allocation

Когда я запускаю второй процесс, еще больше памяти первого процесса перемещается из оперативной памяти в SWAP.Есть ли способ контролировать это поведение и заставить Mac OS X использовать доступную оперативную память?

...