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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…