Pourquoi calloc prend deux arguments alors qu’un seul malloc?

IMO un suffit, pourquoi calloc t- calloc besoin de le scinder en deux arguments?

Je suppose que c’est probablement une histoire et est antérieure à l’époque où C avait des prototypes pour les fonctions. A cette époque sans prototype, les arguments devaient être essentiellement int , le typedef size_t n’était probablement même pas encore inventé. Mais alors, INTMAX est le plus gros bloc que malloc puisse être alloué avec malloc . Le fractionner en deux vous donne simplement plus de flexibilité et vous permet d’allouer de très grands tableaux. Même à cette époque, il existait des méthodes pour obtenir de grandes pages du système qui étaient mises à zéro par défaut. L’efficacité n’était donc pas un problème pour calloc pour malloc .

De nos jours, avec size_t et le prototype de fonction à scope de main, ce n’est plus qu’un rappel quotidien de la riche histoire de C.

Les noms de parameters le documentent assez bien:

 void *malloc(size_t size); void *calloc(size_t nelem, size_t elsize); 

Cette dernière forme permet une allocation nette des tableaux, en fournissant le nombre d’éléments et la taille des éléments. Le même comportement peut être obtenu avec malloc , en se multipliant.

Cependant, calloc initialise également la mémoire allouée sur 0. malloc ne malloc pas, de sorte que la valeur n’est pas définie. malloc peut être plus rapide, en théorie, en raison de la non mise en mémoire; il est probable que cela ne se produise qu’avec de grandes quantités.

Dans cette question , il est suggéré que calloc est clair-alloc et malloc est mem-alloc.