#c #malloc #out-of-memory
#c #malloc #нехватка памяти
Вопрос:
Я выполняю задачу с интенсивным использованием памяти. Я хотел бы добавить предупреждающее сообщение, когда операционной системе не хватает выделяемой памяти. Когда я запускаю приведенный ниже код, процесс завершается, и мой if statement
for, когда указатель равен NULL
, не работает.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ONEGB (1<<30)
int main() {
int count=0;
while(1) {
int *p = malloc(ONEGB);
if (p == NULL) {
printf("There is not much memory left after %d GBn", count);
return 0;
}
memset(p,1,ONEGB);
fprintf(stderr, "got %d GBn", count);
}
}
Вывод был
... got 25 GB got 26 GB got 27 GB Killed
Есть ли какой-либо другой способ сообщить пользователю, что памяти не осталось, прежде чем ОС завершит процесс? В основном меня интересует запуск этого только на серверах Linux.
Комментарии:
1. Интересно, можете ли вы прокомментировать
memset(p,1,ONEGB);
и посмотреть?2. Если я закомментирую memset, он выделяет 131 ТБ, прежде чем остановится, и печатает сообщение об ошибке.
3. Это в любом случае неправильно, я не думаю, что у вас так много памяти, у вас должно быть keep
memset
, я просто хотел увидеть, как вы получаете ошибку. возможно, ОС играет здесь какую-то роль, давайте подождем каких-либо хороших ответов4. Читайте о ООМ-убийце unix.stackexchange.com/questions/153585 /…