c malloc libc calloc c-standard-library

¿Qué significa la primera "c" en "calloc"?



malloc libc (4)

Hice algunas investigaciones y encontré lo siguiente en "UNIX @ TIME-SHARING SYSTEM: UNIX PROGRAMMER''S MANUAL. Séptima edición, Volumen 2", capítulo "PROGRAMMING" ( cursivas de mi parte ):

char *malloc(num);

asigna num bytes El puntero devuelto está lo suficientemente alineado para ser utilizable para cualquier propósito. Se devuelve NULL si no hay espacio disponible.

char *calloc(num, size);

asigna espacio para elementos num , cada uno de size tamaño. Se garantiza que el espacio se establecerá en 0 y el puntero estará lo suficientemente alineado como para ser utilizado para cualquier propósito. Se devuelve NULL si no hay espacio disponible.

cfree(ptr) char *ptr;

El espacio se devuelve al grupo utilizado por calloc . Se puede esperar un trastorno si el puntero no se obtuvo de calloc .

  • La última oración es una clara evidencia de que calloc() definitivamente (¿debería ser?) Más diferente de malloc() luego simplemente borrando la memoria.

    Es bastante interesante que no haya referencia a free() en ninguno de esos cientos de páginas ... :-)

  • Además, UNIX V6 ya tenía calloc() que llama a alloc() . La fuente (vinculada) no muestra ningún enfoque para poner a cero la memoria.

Al concluir con los dos hechos anteriores, me opongo firmemente a la teoría de que la "c" calloc() en calloc() significa "claro".

Un estudiante hizo la pregunta y no estaba seguro.

Las conjeturas incluyen: "contado", "borrado", "fragmentado", "completo", ...

La documentación estándar de la biblioteca no dice lo que representa y no hay funciones con un nombre similar que indiquen un patrón. ¿Alguien sabe la etimología real y quizás tenga una referencia autorizada para respaldarla?


No creo que nadie lo sepa. Pero describir la llamada de calloc () con la semántica de que la memoria debe borrarse, en oposición a malloc (asignación de memoria) que devuelve cualquier basura aleatoria que quedó de una operación libre () anterior, es un modus operandi útil para los estudiantes, que es útil porque le recuerda al usuario que malloc () devuelve un valor inseguro.


Según un extracto del libro Linux System Programming (de Robert Love), no existen fuentes oficiales sobre la etimología de calloc .

Algunos candidatos plausibles parecen ser:

  1. Cuente o cuente , porque calloc toma un argumento de recuento por separado.
  2. Clear , porque asegura que el fragmento de memoria devuelto se borró.

    • Se informa que Brian Kernighan cree que la "c" significa claro (aunque ha admitido que no está seguro).
    • (Consulte los comentarios.) Un calloc.c temprano parece contener una referencia explícita a la palabra clara en un comentario del código fuente (pero no hace referencia al recuento de palabras ni a ningún otro candidato). En otro comentario del código fuente en el archivo malloc.c , la palabra borrar aparece nuevamente, en referencia a la palabra calloc .
  3. C , como en el lenguaje C.

    • (Consulte la respuesta y los comentarios de alk .) Posiblemente una convención de nombres para un conjunto de funciones que se introdujeron aproximadamente al mismo tiempo.

calloc = asignación de memoria contigua.

Significa según la sintaxis de calloc() es decir

void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);

recibe dos parámetros: no. de bloques y tamaño de un bloque, por lo que asigna una matriz de memoria para el no. de bloques que proporcionará.