clase - C-calloc() v. Malloc()
malloc c stack overflow (4)
De http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory
malloc()
es más rápido, ya que calloc()
inicializa la memoria asignada para contener todos los ceros. Debido a que normalmente desearía usar e inicializar la memoria, este beneficio adicional de calloc()
puede no ser necesario.
Posible duplicado:
c diferencia entre malloc y calloc
Por favor explique el significado de esta declaración,
Otra diferencia entre las funciones malloc () y calloc () es que la memoria asignada por la función malloc () contiene valores de basura, mientras que la memoria asignada por la función calloc () contiene todos los ceros.
Fuente ( Programación ''C'' , Salim Y. Amdani)
Gracias
Simplemente significa que si asigna memoria, con calloc (), lo que asigne es 0. es decir, si asignó espacio para una matriz de enteros, todos se establecerían en 0, mientras que con malloc (), la memoria no está Inicializado de cualquier manera.
Podrías usar calloc en situaciones en las que simplemente harás un memset de 0 a la memoria de todos modos.
calloc(...)
es básicamente malloc
+ memset
(si desea inicializar 0 en la memoria)
ptr = malloc(sizeof(struct fubar));
memset(ptr, 0, sizeof (struct fubar)); //here we could use some different value instead of 0 whereas calloc always 0 initialises.
Cuando utiliza malloc
para asignar algo de memoria, sus contenidos anteriores no se borran (es decir, no se inicializan). Es posible que obtenga valores aleatorios que se configuraron cuando se encendió la máquina o puede ver parte de la memoria que pertenecía a programas que se ejecutaban anteriormente pero que no se aclaró después de la asignación y la salida del programa.
calloc
sí es más lento que malloc
porque tienes que dedicar algo de tiempo a borrar el contenido de la memoria asignada. Entonces, si solo necesitas asignar algo de memoria y luego copiar algunas cosas allí, eres libre de usar malloc
.
calloc
está inicializando la memoria antes de usarla, pero malloc
no.
Consulte this enlace:
La función calloc () asignará espacio no utilizado para una matriz de elementos nelem, cada uno de cuyos tamaños en bytes es el tamaño. El espacio se inicializará a todos los bits 0.
Con malloc
, si desea garantizar el mismo efecto, tendrá que llamar a algo como memset para restablecer la memoria, por ejemplo
char* buffer = (char*)malloc(100);
memset(buffer,0,100);
calloc
te salva ese paso extra. La importancia de inicializar la memoria es que está obteniendo una variable a un estado conocido en lugar de uno desconocido. Entonces, si está verificando una variable, diga un elemento de la matriz, para un valor esperado, luego de haber preinicializado la variable antes de tiempo, puede estar seguro de que el valor que está verificando no es basura. En otras palabras, puede distinguir entre basura y valores legítimos.
Por ejemplo, si simplemente deja basura en la variable y está comprobando algún valor, digamos 42, entonces no tiene forma de saber si su programa realmente estableció el valor en 42, o si eso es solo un poco de basura porque no lo inicialicé