Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Sacrifai en 07 de Marzo de 2005, 06:59:32 PM

Título: Dudas Sobre Datos Y Potencias De Dos
Publicado por: Sacrifai en 07 de Marzo de 2005, 06:59:32 PM
 Tengo una pequeña duda. ¿Que ventajas tiene redondear el tamaño de una estructura, union... a bits potencia de dos? Por ejemplo usando __declspec(align(#)) .

Gracias.
Título: Dudas Sobre Datos Y Potencias De Dos
Publicado por: zupervaca en 07 de Marzo de 2005, 07:11:14 PM
 las direcciones de memoria impares son mas lentas que las pares asi tambien la copia de memoria se hace mas rapida al utilizar movsX
Título: Dudas Sobre Datos Y Potencias De Dos
Publicado por: Sacrifai en 07 de Marzo de 2005, 07:29:09 PM
Cita de: "zupervaca"las direcciones de memoria impares son mas lentas que las pares asi tambien la copia de memoria se hace mas rapida al utilizar movsX
Muchas gracias  (ole) . ¿Pero merece la pena? Ya se que son cantidades muy pequeñas, pero quizas para una estructura muy usada...
Título: Dudas Sobre Datos Y Potencias De Dos
Publicado por: zupervaca en 07 de Marzo de 2005, 07:50:22 PM
 si es muy usada si, ganas velocidad a coste de perdida de memoria, ejemplo:

struct pruebas
{
byte dato1;
dword dato2;
};

como ves dato1 es de tipo byte, el comienza en una direccion par, pero por su culpa dato2 comienza en una direccion impar, al alinear los datos de la estructura tu controlas a dato1 como byte, pero el compilador mete entre dato1 y dato2 un byte "basura" para alinear dato2 a direcciones pares

como veras eso implica aumentar en 1 un byte, si esa estructura es muy usada perderas 1 byte por cada una que hagas pero habras ganado mucha velocidad al acceder al dato2, es cuestion de saber si interesa o no, tambien debes de tener cuidado ya que muchas veces pensamos que hacemos algo mal y resulta que no nos damos cuenta que la estructura esta alineada, por ejemplo leer una cabecera de un bmp, si la estructura que usas para leer el bmp esta alineada no leeras bien la cabecera del disco  ;)

no se si me he explicado bien para que veas las ventajas e inconvenientes  :unsure:

pd: normalmente el compilador ya alinea todas las estructuras, a veces tienes que decirle que no lo hago en el caso del bmp y otras veces por seguridad para ganar velocidad le dices que lo haga

a todo esto ya que sale el tema en visual c++ o .net existe el #pragma pack(x) para hacer alineaciones, ¿en otros compiladores de windows o linux se usa lo mismo?

saludos
Título: Dudas Sobre Datos Y Potencias De Dos
Publicado por: Sacrifai en 07 de Marzo de 2005, 08:21:07 PM
 Muchas gracias  (ole) .