NOMBRE¶
posix_memalign, memalign, valloc - Asigna memoria alineada
SINOPSIS¶
#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);
DESCRIPCIÓN¶
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.
VALOR DEVUELTO¶
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.
ERRORES¶
- EINVAL
- El parámetro alignment no es una potencia de
dos, o no es un múltiplo de sizeof(void *).
- ENOMEM
- No hay suficiente memoria para satisfacer la petición
de reserva.
OBSERVACIONES¶
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.
AVAILABILITY¶
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.
VÉASE TAMBIÉN¶
malloc(3),
free(3),
getpagesize(2),
brk(2)