#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);
Устаревшая функция memalign() размещает size байтов и возвращает указатель на распределенную память. Адрес памяти будет кратен boundary, который должен быть степенью числа 2.
Устаревшая функция valloc() размещает size байтов и возвращает указатель на распределенную память. Адрес памяти будет кратен размеру страницы. Эквивалентно memalign(sysconf(_SC_PAGESIZE),size).
Для всех этих трех процедур мамять не будет заполнена нулями.
posix_memalign() возвращает ноль при нормальном завершении работы или, при ошибке, одно из значений, перечисленных в следующем разделе. Заметим, что errno при этом не определяется.
posix_memalign() проверяет, чтобы alignment соответствовало всем требованиям, указанным выше. memalign() может не проверять корректность параметра boundary.
POSIX требует, чтобы память, полученная от posix_memalign() была высвобождена через free(). Некоторые системы не обеспечивают метода исправления памяти, выделенной с помощью memalign() или valloc() (так как можно передать free() указатель, полученный из malloc(), в то время как memalign() будет вызывать malloc() и только затем выравнивать полученное значение). GNU libc позвволяет памяти, полученной через любую из этих процедур, быть исправленной с помощью free().
malloc() для GNU libc всегда возвращает 8-байтовый выровненный адрес памяти, так что эти процедуры требуются только если вам нужны большие выровненные значения.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |