Я предполагаю, что вы спрашиваете о (в некоторой степени) современной настольной или серверной ОС.
Проблема в следующем: любой ответ может быть недействительным уже при возврате результата. Причинами являются другие процессы, потоки, фрагментация памяти и т. Д. Как уже отмечалось в комментариях, ОС может даже сообщать больше памяти, чем доступно, - вкл. Swap. Идея состоит в том, что выделенная память может быть только редко использована процессом, поэтому при необходимости будет обеспечен только доступ к страницам памяти по мере необходимости, сама malloc() не будет запасать какую-либо память заранее.
Также часто не рекомендуется выделять как можно больше памяти, так как это может привести к чрезмерному обмену или голоданию/измельчению других процессов. Итак, просто выделите нужную вам память.
** Заключение: ** Просто забудьте об этом! Выделите требуемую память, не больше, не меньше. Если вам нужна динамическая память, подумайте о динамических структурах, таких как списки и деревья, или используйте realloc()
(но используйте ее хорошо продуманно).
Sidenote:
Не чувствую искушение попробовать выделенные блоки в увеличении размера пока вы не получите NULL возвращается. Это может легко привести к фрагментации, и вы не сможете выделить даже самый предыдущий размер блока (по тем же причинам, что и выше).
Для встроенных ОС может быть совершенно другой ответ.
Вы хотите * на самом деле * выделить память, или вам нужно только выяснить, что такое максимальный размер? –
В любой разумной современной системе ОС может рассмотреть возможность использования всего жесткого диска для переполнения. Вы хотите принять это во внимание? – usr2564301
Jongware, я думаю, что OP хочет знать, как узнать максимальный размер НЕПРЕРЫВНОГО блока памяти в баране, я не думаю, что речь идет о любых проблемах подкачки. – icbytes