Просто чтобы проверить, я запустил этот код
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main() {
int **ar = (int**) malloc(100000000* sizeof(int*));
int i;
for(i = 0; i<10000000; i++) {
ar[i] = (int*) malloc(1000 * 4);
ar[i][123] = 456;
}
usleep(3000000); usleep(3000000);
usleep(3000000); usleep(3000000);
usleep(3000000); usleep(3000000);
return 0;
}
График использования памяти выглядел следующим образом (нижний розовый график отслеживает память).
Хотя этой программе не хватило памяти, дальнейшие требования к памяти привели бы к сбою malloc
, а затем к ошибке сегментации из-за строки ar[i][123] = 456;
.
Я хочу установить ограничение на выделение памяти через мою программу, но также не хочу связывать мою программу статически.
Например, Есть ли способ заставить мою программу использовать не более половины памяти, доступной в системе (системе, в которой запускался бинарный файл), но не более?
Итак, если моя программа запускается на машине с 8 ГБ памяти, она может использовать не более 4 ГБ, но в случае, если программа работает на компьютере с 256 МБ, программе должно быть доступно только 128 МБ.
Кроме того, я хочу сделать это из моей программы, а не контролировать объем доступной памяти с помощью какой-либо внешней утилиты.