Моя Ubuntu не может убить процесс, который занимает слишком много памяти?

Когда я тестировал его, мой компьютер старался изо всех сил, чтобы обеспечить наибольшее количество памяти для моей программы ... И мой компьютер завис это?

/*I write the code to test how much memory can my computer provide the most*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m = 0 ;
    while( malloc(1 << 20) )
    {
        printf ("%d MB\n", ++m) ;
    }
    return 0 ;
}
0
задан 12 January 2014 в 19:32

1 ответ

Поскольку память не выделена, а только зарезервирована, это заполнит некоторые другие части системы, например таблицу страниц, но не физическую память, которую обрабатывает убийца Out of memory . Попробуйте использовать memset () в вашем блоке памяти, прежде чем вытекать из него.

Вам также может быть интересно узнать о / proc / sys / vm / overcommit_memory

От: https://www.kernel.org/doc/Documentation/sysctl/vm.txt

overcommit_memory:

Это значение содержит флаг, который разрешает чрезмерную загрузку памяти.

Когда этот флаг равен 0, ядро ​​пытается оценить объем свободной памяти, когда пользовательское пространство запрашивает больше памяти.

Когда этот флаг равен 1, ядро ​​делает вид, что памяти всегда достаточно, пока она на самом деле не заканчивается.

Когда этот флаг равен 2, ядро ​​использует политику «никогда не перегружать», которая пытается предотвратить любое переполнение памяти. Обратите внимание, что user_reserve_kbytes влияет на эту политику.

Эта функция может быть очень полезна, потому что есть много программ, которые malloc () используют огромные объемы памяти «на всякий случай» и не используют ее много.

Значением по умолчанию является 0.

0
ответ дан 12 January 2014 в 19:32

Другие вопросы по тегам:

Похожие вопросы: