Вы хотите posix_memalign()
:
void *ptr;
int memalign_err = posix_memalign(&ptr, 1UL << 16, 1UL << 16);
if (memalign_err) {
fprintf(stderr, "posix_memalign: %s\n", strerror(memalign_err));
} else {
/* ptr is valid */
}
Первый 1UL << 16
- это выравнивание, а второй - размер.
Когда вы закончите с блоком, вы передадите его free()
.