Herramientas de usuario

Herramientas del sitio


estructuras

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
estructuras [2015/04/02 13:02] – [Typedef] lmateuestructuras [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 dezplazar como:+Y por lo tanto podemos reescribir la función desplazar como:
  
 <code> <code>
Línea 205: Línea 205:
 </code> </code>
  
-//La etiqueta del str//Itálica//uct se puede omitir cuando no se va a usar a continuación en el archivo.//+//La etiqueta del struct se puede omitir cuando no se va a usar a continuación en el archivo.//
 ==== Estructuras recursivas ==== ==== Estructuras recursivas ====
  
Línea 262: Línea 262:
 <code> <code>
   void insertar(Node **ppnode, int y) {   void insertar(Node **ppnode, int y) {
-    Node *ins+    Node *pnode= *ppnode
-    while (*ppnode!=NULL && (*ppnode)->x<y) +    while (pnode != NULL  &&  pnode->x < y) { 
-      ppnode= &(*ppnode)->next; +      ppnode= & pnode->next
-     +      pnode= *ppnode
-    ins= (Node*)malloc(sizeof(Node));+    
 +   
 +    Node *ins= malloc(sizeof(Node));
     ins->x= y;     ins->x= y;
-    ins->next= *ppnode;+    ins->next= pnode;
     *ppnode= ins;     *ppnode= ins;
   }   }
Línea 440: Línea 442:
 </code> </code>
  
-¿Cómo se puede garantizar que n esté alineado?  La función malloc decide la ubicación en memoria de la+¿Cómo se puede garantizar que //n// esté alineado?  La función //malloc// decide la ubicación en memoria de la
 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, o si es un double, que debe estar alineado a 8 bytes.  Como malloc no sabe cual es el requerimiento de alineamiento +para el cual no hay requerimiento de alineamiento, o si es un //double//, que debe estar alineado a 8 bytes.  Como //malloc// no sabe cual es el 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.  //Malloc// siempre retorna direcciones múltiplo de 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 solución está en que el compilador asigna un desplazamiento 4 para n y deja sin +la variable //n// estaría desalineada. 
-ocupar los bytes 1, 2 y 3 de la estructura.  ¡Por lo tanto el tamaño de la estructura U es 8!+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.  ¡Por lo tanto el tamaño de la estructura //U// es 8!
 El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución.  Cuando El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución.  Cuando
 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 ''sizeof struct T'' consideremos este código:+Para responder cual es el tamaño de //sizeof struct T// consideremos este código:
  
 <code> <code>
estructuras.1427979766.txt.gz · Última modificación: 2015/04/02 13:02 por lmateu