Как я могу ограничить память, полученную с помощью `malloc ()` без ограничения стека?
Я пытаюсь не дать студенческому коду разойтись с распределением ресурсов и остановить мою тестовую машину. я пробовал
setrlimit(RLIMIT_DATA, r);
гдеr
является структурой, содержащей ограничения. Но, к сожалению, хотя этот предел прекращаетсяbrk
а такжеsbrk
от выделения, библиотека C просто переключается наmmap
и продолжает правильно распределять.
Я также пытался
setrlimit(RLIMIT_AS, r)
и это останавливает процесс в своем русле, но это средство является слишком серьезным - невозможно восстановить процесс послеENOMEM
ошибка, потому что нет стекового пространства для вызовов, которые делает код при обнаруженииNULL
значение, возвращаемое изmalloc()
.
У меня ограниченный контроль над двоичными файлами, поэтому, если это возможно сделать с помощью системного вызова, я бы предпочел это. Но мне нужны некоторые средства ограничения выделения, не разрушая способность процесса к восстановлению. У кого-нибудь есть предложения?
ОБНОВИТЬ: Я нашел что-то под названиемfailmalloc, но это не очень сложно, и хотя я могу вызвать с ним ошибку, я всегда получаю segfault, который GDB не может диагностировать.
ДАЛЬНЕЙШЕЕ ОБНОВЛЕНИЕ: Я нашел этоsetrlimit(RLIMIT_AS, r)
делает похоже, я делаю ту работу, которую хочу, по крайней мере, в некоторых случаях - ошибки, которые возникали позже, были вызваны ошибкой в неродственном модуле. Если кто-то не придумает что-нибудь интересное (или причину оставить вопрос), я, вероятно, удалю вопрос.