Когда я тестировал его, мой компьютер старался изо всех сил, чтобы обеспечить наибольшее количество памяти для моей программы ... И мой компьютер завис это?
/*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 ;
}
Поскольку память не выделена, а только зарезервирована, это заполнит некоторые другие части системы, например таблицу страниц, но не физическую память, которую обрабатывает убийца 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.