GCCまたはglibcに、整列ポインタにメモリブロックを割り当てる標準化された関数はありますか? MSVCで _ align_malloc() が好きですか?
memalign 関数ファミリーを参照してください。
質問が行われたため、C11によって新しい機能が標準化されました。
void *aligned_alloc(size_t alignment, size_t size);
また、glibcで使用できます(私の知る限り、Windowsでは使用できません)。 memalign
と同じ順序で引数を取ります。これは、Microsoftの_aligned_malloc
、および割り当て解除に通常と同じfree
関数を使用します。
微妙な違いは、aligned_alloc
には、size
がalignment
の倍数である必要があります。
[
posix_memalign()
] [1]関数はアライメントされたメモリ割り当てを提供し、glibc 2.1.91以降で使用可能です。
しかし、必ずしも他のコンパイラではありません:標準を引用して「posix_memalign()関数はアドバイザリ情報オプションの一部であり、すべての実装で提供される必要はありません。」
がある _mm_malloc
および_mm_free
これは、少なくともx86/x64世界のほとんどのコンパイラーでサポートされています。
知る限り、これらの関数は標準ではありません。しかし、私の知る限り、最もサポートされているものです。他の関数はよりコンパイラ固有です:
C11標準関数もありますが、残念ながらc ++ 11にはありません。c++に含めるには、非標準プリプロセッサ定義が必要です...
それはあなたが期待するアライメントの種類に依存します。より厳密なアライメント、またはよりリラックスしたアライメントが必要ですか?
malloc
は、定義により、Cプログラムの標準タイプ(したがって、標準タイプから作成されたタイプ)を格納するために適切に位置合わせされたポインターを返すことが保証されています。あなたが探しているものですか?それとも別のものが必要ですか?