Можно ли какнить зарезирвировать для программы на Си ++ какоето количество дополнительной памяти? Т.е чтоб если в системе кончилась память, у самой проги (покрайней мере для себя ) было ?
Как гарантировать доступность памяти для произвольного процесса? Иногда заканчивается память и даже по ssh нельзя залогиниться, чтобы убить зажравшийся процесс.
>Как гарантировать доступность памяти для произвольного процесса? Иногда заканчивается память и даже по ssh нельзя залогиниться, чтобы убить зажравшийся процесс.
Млин, вот умники, выделить, лимиты настроить, аллокатор написать, че только не выдумают...
map mlock! идея простая - выделяешь, потом лочишь --> profit, никто не отберет.
mlock() and mlockall() respectively lock part or all of the calling process’s virtual address space into RAM,
preventing that memory from being paged to the swap area.
Т.е все дела остаются в оперативке, а не сбрасываются в свап ?А если далее по ходу выполнения пытается создается какой-то обькт, но ему не хвататет памяти что делать то?
Вопрос был вобщето такой, нельзяли как-то выделить допустим пару дополнительных метров програаме на будушие расходы? Пока самым подходяшим способом остается, создать какой-то обьект (при запуске проги) а в случае нехватки памяти удалить его? Но тут то весь вопрос, в том что придется создавать какой-то обработчик, и везде вызывать его, а если прога уже написана? Т.е надо заново модефицировать, что слонавато
> Т.е все дела остаются в оперативке, а не сбрасываются в свап ?А если далее по ходу выполнения пытается создается какой-то обькт, но ему не хвататет памяти что делать то?
Идея такая: при старте - аллокируешь себе пул памяти, и пишешь, да, свой аллокатор, что-бы он умел этот пул цеплять, а потом -- mlockall или mlock только этого пула. Без mlock-а фактически никто не будет выделять память, реальное выделение памяти осущестляется при первом доступе к странице.