estructuras
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
estructuras [2015/04/02 13:03] – [Typedef] lmateu | estructuras [2015/09/30 20:03] (actual) – [Estructuras recursivas] lmateu | ||
---|---|---|---|
Línea 88: | Línea 88: | ||
(*u).x ≡ u->x | (*u).x ≡ u->x | ||
| | ||
- | Y por lo tanto podemos reescribir la función | + | Y por lo tanto podemos reescribir la función |
< | < | ||
Línea 262: | Línea 262: | ||
< | < | ||
void insertar(Node **ppnode, int y) { | void insertar(Node **ppnode, int y) { | ||
- | Node *ins; | + | Node *pnode= *ppnode; |
- | while (*ppnode!=NULL && | + | while (pnode != NULL && |
- | ppnode= &(*ppnode)-> | + | ppnode= & pnode->next; |
- | + | pnode= *ppnode; | |
- | ins= (Node*)malloc(sizeof(Node)); | + | |
+ | | ||
+ | | ||
ins->x= y; | ins->x= y; | ||
- | ins-> | + | ins-> |
*ppnode= ins; | *ppnode= ins; | ||
} | } | ||
Línea 440: | Línea 442: | ||
</ | </ | ||
- | ¿Cómo se puede garantizar que n esté alineado? | + | ¿Cómo se puede garantizar que //n// esté alineado? |
estructura sin saber su tipo. Conoce el tamaño la región pedida, pero no sabe si es para un arreglo de 8 caracteres, | estructura sin saber su tipo. Conoce el tamaño la región pedida, pero no sabe si es para un arreglo de 8 caracteres, | ||
- | para el cual no hay requerimiento de alineamiento, | + | para el cual no hay requerimiento de alineamiento, |
- | se pone en el peor caso: 8. Malloc siempre retorna direcciones múltiplo de 8. | + | se pone en el peor caso: 8. |
- | Pero aún así si el compilador asigna un desplazamiento 0 para c y un desplazamiento 1 para n, la variable n | + | Pero aún así si el compilador asigna un desplazamiento 0 para //c// y un desplazamiento 1 para //n//, |
- | estaría desalineada. | + | la variable |
- | ocupar los bytes 1, 2 y 3 de la estructura. | + | La solución está en que el compilador asigna un desplazamiento 4 para //n// y deja sin |
+ | ocupar los bytes 1, 2 y 3 de la estructura. | ||
El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución. | El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución. | ||
una variable no está alineada, el procesador requiere más ciclos del reloj para leerla o modificarla. | una variable no está alineada, el procesador requiere más ciclos del reloj para leerla o modificarla. | ||
Línea 453: | Línea 456: | ||
//bus error// y el programa no continúa. | //bus error// y el programa no continúa. | ||
- | Para responder cual es el tamaño de '' | + | Para responder cual es el tamaño de //sizeof struct T// consideremos este código: |
< | < |
estructuras.1427979814.txt.gz · Última modificación: 2015/04/02 13:03 por lmateu