mallocは任意の位置合わせを許可していません。私たちはこれを自分自身で行うことができますが、別のポインターの場所で終わります。無料にはオリジナルが必要です。mallocポインタを調整する
mallocに新しいポインタを知らせる方法はありますか?それで、それ自体が調整でき、古いポインタ/オフセットを保存する必要はありませんか?
mallocは任意の位置合わせを許可していません。私たちはこれを自分自身で行うことができますが、別のポインターの場所で終わります。無料にはオリジナルが必要です。mallocポインタを調整する
mallocに新しいポインタを知らせる方法はありますか?それで、それ自体が調整でき、古いポインタ/オフセットを保存する必要はありませんか?
C11は、アライメントの指定をサポートするaligned_alloc
を導入しています。 POSIXでは、posix_memalign(3)
のようになります。これは、sizeof(void*)
の倍数の2の累乗をサポートしています。
また、通常の場合はmalloc
で十分です。 malloc
のアライメントはすべての割り当てに対して_Alignof(max_align_t)
です。
C11が利用できない場合、posix_memalign(3)
があります。 Windowsの場合は、_aligned_alloc
がMSVC 2015で始まり、VirtualAlloc
を使用してページアラインバッファを割り当てます。
これらのいずれも動作しない場合は、malloc
の上に独自のソリューションをロールバックする必要があります。次の整列されたアドレスを取得し、先行する2つのバイトの整列を保存します。無料のラッパーを呼び出すときは、先行する2バイトを取り出し、それらをポインタから減算して結果を解放します。
まあ、私はあなたが効果的にアライメントをmalloc` `伝える意味で、このような獣
Defined in header <stdlib.h>
void *aligned_alloc(size_t alignment, size_t size);
があるC11を信じますか? – Downvoter
与えられたポインタを変更した場合、それを覚えていたり、元に戻したりすることはできません。 –
@Downvoter多かれ少なかれ。私はそんなに整列したものを使うことはできません。私は古いから元を計算することはできません。 – AbstractDissonance