con clase array c malloc calloc

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é