Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dudas Sobre Datos Y Potencias De Dos

Iniciado por Sacrifai, 07 de Marzo de 2005, 06:59:32 PM

« anterior - próximo »

Sacrifai

 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.

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

Sacrifai

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...

zupervaca

 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

Sacrifai







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.