Un étudiant a posé la question et je n'en étais pas sûr.
Les suppositions incluent: "compté", "effacement", "fragmenté", "complet", ...
La documentation standard de la bibliothèque ne dit pas ce qu'elle représente et il n'y a pas de fonctions de même nom qui indiqueraient un modèle. Quelqu'un connaît-il l'étymologie réelle et peut-être a-t-il une référence faisant autorité pour la sauvegarder?
Selon un extrait du livre Linux System Programming (par Robert Love), aucune source officielle n'existe sur l'étymologie de calloc
.
Certains candidats plausibles semblent être:
calloc
prend une valeur distincte argument de comptage.Clear , car il garantit que le morceau de mémoire retourné a été effacé.
calloc.c
semble contenir une référence explicite au Word clear dans un commentaire de code source (mais aucune référence au Word compter ou à tout autre candidat). Dans un autre commentaire de code source dans le fichier malloc.c
, le mot clair réapparaît, en référence au mot calloc
.[~ # ~] c [~ # ~] , comme dans le langage C.
J'ai fait quelques recherches et j'ai trouvé ce qui suit dans "UNIX @ TIME-SHARING SYSTEM: UNIX PROGRAMMER'S MANUAL. Seventh Edition, Volume 2", chapitre "PROGRAMMING" ( Italics par moi ):
char *malloc(num);
alloue
num
octets. Le pointeur renvoyé est suffisamment bien aligné pour être utilisable à toutes fins.NULL
est retourné si aucun espace n'est disponible.char *calloc(num, size);
alloue de l'espace pour
num
éléments chacun desize
taille. L'espace est garanti réglé à 0 et le pointeur est suffisamment bien aligné pour être utilisable à toutes fins.NULL
est retourné si aucun espace n'est disponible.cfree(ptr) char *ptr;
L'espace est retourné au pool utilisé par
calloc
. Un désordre peut être attendu si le pointeur n'a pas été obtenu à partir decalloc
.
La dernière phrase est une preuve claire que calloc()
était définitivement (censé être?) plus différent de malloc()
puis simplement en effaçant la mémoire.
Assez intéressant, il n'y a aucune référence à free()
sur aucune de ces centaines de pages ... :-)
De plus, UNIX V6 avait déjà calloc()
qui appelle alloc()
. La source (liée) ne montre aucune approche pour mettre à zéro toute mémoire.
Pour conclure des deux faits ci-dessus, je m'oppose fortement à la théorie selon laquelle le premier "c" dans calloc()
signifie "clair".
Je pense que personne ne le sait. Mais décrire l'appel calloc () avec la sémantique selon laquelle la mémoire doit être effacée, par opposition à malloc (allocation de mémoire) qui retourne tous les déchets aléatoires qui ont été laissés par une précédente opération free (), est utile modus operandi pour les étudiants, ce qui est utile car il rappelle à l'utilisateur que malloc () renvoie une valeur non sécurisée.
calloc
= allocation de mémoire contiguë.
Cela signifie selon la syntaxe de calloc()
i.e
void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);
il reçoit deux paramètres: non. de blocs et la taille d'un bloc, il alloue donc un tableau de mémoire pour le no. de blocs que vous fournirez.