Cに整列メモリを割り当てると、無料にする方法
-
20-09-2019 - |
質問
どのようにC内の特定の境界(例えば、キャッシュラインの境界)に整列のメモリを割り当てていますか?私は理想的には少なくとも32および64ビットアーキテクチャ間---できるだけポータブルになり、実装のように/無料malloc関数を探しています。
編集追加する:つまり、私は<のhref = "http://www.mkssoftware.com/docs/man3/memalign.3(?現在は廃止)のように振る舞うと何かを探しています。無料使用して解放することができ、ASP」のrel = "noreferrer">あるmemalign の機能、。
解決
ここで、malloc関数への呼び出しをカプセル化溶液は、あるアラインメント目的のために大きなバッファを割り当て、格納するだけ後で呼び出しのための整列バッファ前の元の割り当てられたアドレスを解放する。
// cache line
#define ALIGN 64
void *aligned_malloc(int size) {
void *mem = malloc(size+ALIGN+sizeof(void*));
void **ptr = (void**)((uintptr_t)(mem+ALIGN+sizeof(void*)) & ~(ALIGN-1));
ptr[-1] = mem;
return ptr;
}
void aligned_free(void *ptr) {
free(((void**)ptr)[-1]);
}
他のヒント
posix_memalign
/ free
を使用してください。
int posix_memalign(void **memptr, size_t alignment, size_t size);
void* ptr;
int rc = posix_memalign(&ptr, alignment, size);
...
free(ptr)
posix_memalign
はあなたが言及として、memalign
のための標準的な交換が廃止されている。
あなたはどのようなコンパイラを使用していますか?あなたはMSVCにしている場合は、 _aligned_malloc()
を試すことができます>と_aligned_free()
ます。
所属していません StackOverflow