POSIX: выделить 64 КБ на границе 64 КБ - PullRequest
0 голосов
/ 23 мая 2010

Я действительно хотел бы выделить только 64 КБ памяти, а не 128 КБ, а затем выполнить выравнивание вручную - слишком расточительно. VirtualAlloc на окнах дает именно такое поведение. Предположительно, в SquirrelFish есть код, позволяющий сделать это практически на каждой платформе, но мне не удалось его найти. Есть ли эффективный способ размещения 64 КБ на границе 64 КБ в POSIX? В противном случае, в Linux?

Ответы [ 3 ]

8 голосов
/ 23 мая 2010

Выезд posix_memalign(3)

СИНТАКСИС

 #include <stdlib.h>

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

ОПИСАНИЕ

 The posix_memalign() function allocates size bytes of memory such that
 the allocation's base address is an exact multiple of alignment, and
 returns the allocation in the value pointed to by memptr.

Проверьте man-страницу для получения более подробной информации ...

0 голосов
/ 26 июня 2010

Конечно, posix_memalign - элегантное решение, но даже если вы выделите 128 Кбайт, любые нетронутые страницы останутся нулевыми страницами копирования при записи и используют минимальные физические ресурсы. Вы также можете использовать mmap с MAP_PRIVATE для создания карты 128 КБ, а затем munmap для любых ее частей без выравнивания.

0 голосов
/ 24 мая 2010

Вы можете использовать mmap () с MAP_PRIVATE. В наши дни довольно много распределителей libc внутренне используют mmap (), чтобы получить фрагменты памяти для выделения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...