Pregunta

¿Cuál es el propósito de usar? sizeof usando malloc en C?¿Por qué es necesario?

Quiero decir que podemos usar sizeof ¿Pero ya sabemos el tamaño (= 1000 bytes) que estamos asignando en la memoria?

Soy principiante en C entonces.Esta podría ser una pregunta muy obvia.

¿Fue útil?

Solución

tipos de datos y materia de memoria

La respuesta está en los tipos de datos. Si bien usted sabe cuántos objetos desea asignar memoria para, es posible que no desee pasar por la molestia de computar mentalmente su tamaño.

también la mantenimiento

Además, ¿qué pasa si la composición de estos cambios más tarde? Luego estás jodido y tienes que editar todo.

, así que eso es irrelevante en su ejemplo, sin contexto. Pero en el caso de dónde quiere asignar memoria para cosas más complejas (digamos, una estructura con varios campos), se vuelve bastante importante y útil.

Ejemplo 1 (No es tan importante aquí):

char *s = malloc(100 * sizeof(char));

Pero hey, son solo chars, está bien, podrías haber hecho eso:

char *s = malloc(100);

generalmente funciona. Pero disparándote en el pie, como verás a continuación.

Ejemplo 2 (ya lo hace un poco):

int *i = malloc(100 * sizeof(int));

Claro, podría haber escrito eso:

int *i = malloc(100 * 4);

Es decir, asumiendo que se desarrolla para una sola arquitectura que conoce bastante bien.

Ejemplo 3 (¡empezando a importar bastante!):

typedef struct s_listelement{
    int                  dataitem;
    struct s_listelement *link;
}              t_listelement;

t_listement *le = malloc(sizeof(t_listelement));

Ahora imagine que la estructura del elemento de lista enlazada contiene un montón de otros campos ...

¿Desearías confiar en GreenCodicEtAdOde, o ir a divertirte y hacer los matemáticas tú mismo?

Otros consejos

Supongamos que desea asignar memoria para almacenar ints.Su suposición inicial será, está bien, necesito tener n números enteros y cada número entero requiere x bytes.Entonces el espacio será n*x bytes.

Pero en realidad esto x Depende de la arquitectura.Quizás sea de 16 bits, 32 bits, etc.Entonces, para que su código pueda funcionar en diferentes entornos, se recomienda utilizar n*sizeof(int) en lugar de n*x.

Por ejemplo, si necesita asignar espacio para 10 números enteros:

int *p=malloc(sizeof(int)*10);

¿Qué pasa si cambias el tamaño de mallocated?

Tendrá que 1) calcular nuevamente el nuevo tamaño (dejando de lado los problemas de múltiples arquitecturas de destino, donde tendrá que calcular el nuevo tamaño en cada destino), 2) buscar todos malloc(1000), asegúrese de que se refiera a mallocated (que puede que no sea obvio) y reemplácelo con un nuevo tamaño.

No tienes ninguno de estos 2 problemas al usar sizeof.Así usando sizeof conduce a un código más mantenible y legible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top