В недавнем обзоре кода было заявлено, что
В некоторых системах
calloc()
может выделять больше байтовSIZE_MAX
тогда какmalloc()
ограничен.
Я утверждаю, что это ошибочно, потому что calloc()
создает пространство для массива объектов, который, будучи массивом, сам по себе является объектом. И ни один объект не может быть большего размера, чем SIZE_MAX
.
Итак, кто из нас прав? На (возможно гипотетической) системе с адресным пространством, большим, чем диапазон size_t
, разрешено ли calloc()
преуспеть при вызове с аргументами, чей продукт больше SIZE_MAX
?
Чтобы сделать его более конкретным: выйдет ли следующая программа с ненулевым статусом?
#include <stdint.h>
#include <stdlib.h>
int main()
{
return calloc(SIZE_MAX, 2) != NULL;
}