Я использую 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 использовать доступную оперативную память?