News for hackers. Stuff that matters.
Re:Show HN by unwind on Saturday December 03, 2022 @03:36PM (#33847052)
Are you sure?

The calloc() [1] function mentioned above takes two values of type size_t, and allocates their product bytes.

I'm on mobile without (!) the C99 draft spec but at least the man page gives no such restriction.

[1] https://linux.die.net/man/3/calloc

Re:Show HN by mek6800d2 on Saturday December 03, 2022 @04:38PM (#33847649)
I read something about this recently, somewhere, maybe HN. Specifically, in calloc(), what is done and what should really be done if the multiplication overflows. As will happen, for example, if you try to calloc() two elements of size SIZE_MAX, when SIZE_MAX is the maximum representable unsigned integer value on the machine. So, I don't think calloc() is available or intended as a way to circumvent malloc()'s size restriction.
Re:Show HN by Someone on Saturday December 03, 2022 @06:39PM (#33848716)
I stand corrected. Initially, I thought that, even if it calloc can’t, an OS could provide a different way to obtain a pointer to a memory region that’s larger than SIZE_MAX.

However, the standard says (https://en.cppreference.com/w/c/types/size_t):

“size_t can store the maximum size of a theoretically possible object of any type (including array).”

and (https://en.cppreference.com/w/c/language/pointer):

“Pointer is a type of an object that refers to a function or an object of another type, possibly adding qualifiers. Pointer may also refer to nothing, which is indicated by the special null pointer value.”

⇒ pointers must either be null or point to an object, and objects aren’t larger than SIZE_MAX, so I think having a pointer pointing to a block larger than SIZE_MAX violates the standard.

Re:Show HN by jstimpfle on Saturday December 03, 2022 @06:51PM (#33848836)
> pointer pointing to a block larger than SIZE_MAX violates the standard.

it's simply not possible, by definition.

Re:Show HN by jstimpfle on Saturday December 03, 2022 @06:41PM (#33848732)
I mean, explain first how you plan to allocate more address space than is addressable?

calloc returns NULL when it's not possible to satisfy the request.