#linux #windows #memory-management #allocator
#linux #Windows #управление памятью #распределитель
Вопрос:
В Windows я могу выделить 64 КБ виртуальной памяти, и возвращаемая память будет выровнена по границе 64 КБ.
Это полезно, поскольку я могу округлить любой адрес в моем распределителе памяти до границы 64 КБ и привести его к «заголовку страницы», где я сохраняю информацию о бронировании.
Я хотел бы сделать то же самое в Linux, но, похоже, я могу сделать это только для размера страницы (обычно 4K).
Есть ли какой-либо способ попросить ОС Linux предоставить мне, скажем, 16K или 8K, но выровненный по той же границе?
Комментарии:
1. Вы смотрели
posix_memalign
?2. Я хотел бы сам управлять страницами (mmap). Куча Linux подвела меня, мне пришлось в конечном итоге использовать jemalloc, а в Windows куча, как она есть, в большинстве сценариев. Я подумываю об использовании вместо этого больших страниц.
3. Linux позволяет дешево сохранять большие, в основном неиспользуемые выделения, и вы можете удалять поддиапазоны
madvise
. Собственное решение Linux, скорее всего, сделает это вместо того, чтобы пытаться выделить 64 КБ за раз.4. Вы также можете создать большую выровненную область с помощью sbrk и некоторой арифметики.