Why does calloc require two parameters and malloc just one?

c, memory-management

Solution

Historical reasons.

At the time of when `calloc` was introduced, the `malloc` function didn't exist and the `calloc` function would provide the correct alignment for one element object.

When `malloc` was introduced afterwards, it was decided the memory returned would be properly aligned for any use (which costs more memory) and so only one parameter was necessary. The API for `calloc` was not changed but `calloc` now also returns memory properly aligned for any use.

EDIT:

See the discussion in the comments and the interesting input from @JimBalter.

My first statement regarding the introduction of `malloc` and `calloc` may be totally wrong.

Also the real reasons could also be well unrelated to alignment. C history has been changed a lot by compiler implementers. `malloc` and `calloc` could come from different groups / compilers implementers and this would explain the API difference. And I actually favor this explanation as the real reason.

Problem

It's very bothersome for me to write `calloc(1, sizeof(MyStruct))` all the time. I don't want to use an idea like wrapping this method and etc. I mean I want to know what two parameters gives me? If it gives something, why doesn't `malloc`have two parameters too? By the way, I searched for an answer to this question but I didn't find a really good answer. Those answers was that `calloc` can allocate larger blocks than `malloc` can and etc. I saw another answer that `calloc` allocates an array. With `malloc` I can multiply and I'll get an array and I can use it without `1,` at the start.

Original source

Related problems