2008-09-24 34 views
7

He estado leyendo el código heredado, que involuciona en el sistema de agrupación de memoria personalizada, luego encontré que el código usa _aligned_malloc. Me pregunto qué es esta función y cuándo tengo que usarla.¿Cuándo debería usar _aligned_malloc()?


Gracias a todos.

Leí MSDN pero lo que quería era la respuesta como "Un ejemplo de una razón para querer una cierta alineación es usar los datos con la instrucción SSE establecida en x86 donde los datos deben estar alineados a un múltiplo de 16" .

Finalmente entendí lo que significa ese código. gracias de nuevo.

+1

Otro ejemplo: procesador ARM. Requiere alinear todos los datos a 4 bytes. –

Respuesta

0

¿Ha comprobado la documentación de MSDN? Puede encontrar la entrada correspondiente here.

10

Esta función es útil cuando la alineación de la asignación de memoria es importante para usted. La alineación significa que el valor numérico del puntero devuelto debe ser divisible uniformemente por un cierto número, es decir. ((unsigned int) ptr) La alineación% debe evaluarse a 0.

Un ejemplo de una razón para querer una cierta alineación es usar los datos con la instrucción SSE establecida en x86 donde los datos deben alinearse a un múltiplo 16

+0

O intenta almacenar longitudes de 4 bytes en un PowerPC (et al) –

5

Aquí hay un caso de uso con el que se puede relacionar. En mis 17 años de desarrollo en C/C++, solo necesité una vez las funciones del núcleo _aligned_malloc() (implementación de WinOS) y memalign (implementación POSIX), y eso fue cuando se codificaban las E/S de disco de bajo nivel. La razón de esto es que cuando no se usa el buffer de E/S del sistema operativo (por ejemplo, WinOS llamando al openfile() con el indicador FILE_FLAG_NO_BUFFERING) y leyendo/escribiendo en el disco, el sistema operativo requiere que el bloque de memoria se alinee con el tamaño del sector del disco; si el tamaño del sector del disco fuera de 512 bytes y quisiera escribir 1234 bytes en el disco, haría algo como esto:

_aligned_malloc(1234, 512); 
Cuestiones relacionadas