RSIZE_MAX
определено в Приложении К С11, которое является факультативным. Реализация, которая его поддерживает, заранее определит макрос __STDC_LIB_EXT1__
. Например, реализация gcc / glibc, которую я использую в своей системе Ubuntu, не поддерживает ее и поэтому не определяет RSIZE_MAX
.
В любом случае, нет гарантии, что malloc(RSIZE_MAX)
будет успешным, и в стандарте нет никакого значения, что RSIZE_MAX
, даже если он определен, является максимальным размером выделения, поддерживаемым malloc
. Оценка malloc(RSIZE_MAX+1)
даже не является нарушением ограничения времени выполнения ; malloc()
по-прежнему принимает аргумент типа size_t
, а не rsize_t
. malloc
сообщает об ошибке, возвращая нулевой указатель.
См. N1570 K.3.4:
Макрос
RSIZE_MAX
, которое расширяется до значения типа size_t
. Функции, которые имеют
параметры типа
rsize_t
считают это нарушением ограничения времени выполнения, если значения этих параметров больше RSIZE_MAX
.
Обратите внимание, что в некоторых системах (в частности, в системах на основе Linux) malloc()
может показаться успешным, возвращая ненулевой результат, даже если для выделения недостаточно памяти. Смотрите "overcommit" и "OOM killer".