DOKK / manpages / debian 10 / manpages-es / posix_memalign.3.es
POSIX_MEMALIGN(3) Manual del Programador de Linux POSIX_MEMALIGN(3)

posix_memalign, memalign, valloc - Asigna memoria alineada

#include <stdlib.h>

int posix_memalign(void **memptr, size_t alignment, size_t size);
void *memalign(size_t boundary, size_t size);
void *valloc(size_t size);

La función posix_memalign() asigna size bytes y deja la dirección de la memoria reservada en *memptr. La dirección de la memoria reservada será un múltiplo de alignment, que debe ser una potencia de dos y un múltiplo de sizeof(void *).

La función obsoleta memalign() asigna size bytes y devuelve un puntero a la memoria reservada. La dirección de memoria será un múltiplo de boundary, que debe ser una potencia de dos.

La función obsoleta valloc() asigna size bytes y devuelve un puntero a la memoria reservada. La dirección de memoria será un múltiplo del tamaño de página. Es equivalente a memalign(sysconf(_SC_PAGESIZE),size).

En todas estas rutinas, la memoria no se rellena con ceros.

memalign() y valloc() devuelven un puntero a la memoria reservada, o NULL si falla la petición.

posix_memalign() devuelve cero en caso de éxito, o uno de los códigos de error listados en la siguiente sección en caso de fallo. Observe que errno no se modifica.

El parámetro alignment no es una potencia de dos, o no es un múltiplo de sizeof(void *).
No hay suficiente memoria para satisfacer la petición de reserva.

posix_memalign() verifica que alignment cumpla los requisitos detallados arriba. memalign() puede no comprobar que el parámetro boundary sea correcto.

POSIX exige que la memoria obtenida con posix_memalign() pueda ser liberada usando free(). Algunos sistemas no ofrecen ninguna manera de recuperar la memoria reservada con memalign() o valloc() (porque sólo se puede pasar a free() un puntero obtenido con malloc(), mientras p.e. memalign() llamaría a malloc() y después alinearía el valor obtenido). GNU libc permite que la memoria obtenida con cualquiera de estas rutinas sea recuperada con free().

La versión de malloc() de GNU libc siempre devuelve direcciones de memoria alineadas de 8 bytes, por lo que estas rutinas solamente se necesitan si requiere valores de alineamiento mayores.

Las funciones memalign() y valloc() han estado disponibles en todas las bibliotecas libc de Linux. La función posix_memalign() está disponible desde glibc 2.1.91.

La función valloc() apareció en 3.0 BSD. Está documentada como obsoleta en BSD 4.3, y como antigua en SUSv2. Ya no aparece en SUSv3. La función memalign() aparece en SunOS 4.1.3 pero no en BSD 4.4. La función posix_memalign() viene de POSIX 1003.1d.

malloc(3), free(3), getpagesize(2), brk(2)

11 octubre 2001 GNU