Ответ 1
Смотрите семейство функций memalign.
Есть ли стандартизированная функция в GCC или glibc для выделения блока памяти по выровненному указателю? Как и _align_malloc() в MSVC?
Смотрите семейство функций memalign.
Так как вопрос был задан, новая функция была стандартизирована C11:
void *aligned_alloc(size_t alignment, size_t size);
и это доступно в glibc (не на окнах, насколько я знаю). Он принимает свои аргументы в том же порядке, что и memalign
, в противоположность Microsoft _aligned_malloc
, и использует ту же free
функцию, что и для освобождения.
Тонкое отличие состоит в том, что aligned_alloc
требует, чтобы size
был кратным alignment
.
Функция [
posix_memalign()
] [1] обеспечивает выравнивание выделенной памяти и доступна с glibc 2.1.91.
Но не обязательно с другими компиляторами: цитирование стандарта: "Функция posix_memalign() является частью опции" Консультативная информация "и не обязательно должна предоставляться во всех реализациях".
Существуют _mm_malloc
и _mm_free
, которые поддерживаются большинством компиляторов мира x86/x64, по крайней мере:
AFAIK, эти функции не являются стандартными. Но, насколько мне известно, самые поддерживаемые. Другие функции более специфичны для компилятора:
Существуют также стандартные функции C11, но, к сожалению, они не находятся в С++ 11, а в том числе и в С++ требуют определения нестандартного препроцессора...
Это зависит от того, какое выравнивание вы ожидаете. Вы хотите более строгое выравнивание или более расслабленное выравнивание?
malloc
по определению гарантированно возвращает указатель, который правильно выровнен для хранения любого стандартного типа в C-программе (и, следовательно, любого типа, построенного из стандартных типов). Это то, что вы ищете? Или вам нужно что-то другое?