私の質問は2つの部分で構成されています。
- cc コンパイラを使用した sparc(sun) の memalign(block_size,bytes) は、バイトが 2 の累乗であることをチェックしないことに気付きました2の累乗。
これは太陽のバグですか、パッチはありますか、それとも自分で memalign を書く必要がありますか。
さらに、私は構造を持っています(私のコードではありません):
typedef struct CLHLockStruct { volatile CLHLockNode CACHE_ALIGN *Tail ; volatile CLHLockNode CACHE_ALIGN *MyNode[N_THREADS] ; volatile CLHLockNode CACHE_ALIGN *MyPred[N_THREADS] ; } CLHLockStruct;
私はMVSC(ビジュアルスタジオ2008)の下でコンパイルしています:
CACHE_LINE_SIZE = 64
CACHE_ALIGN = __declspec(align(CACHE_LINE_SIZE))
N_THREADS = 8
sizeof(CLHLockStruct)=192
コードは最初は sparc アーキテクチャ用に書かれており、多くのコードを変更せずに MVSC に移行しようとしています。
彼らのコードでは memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)) を使用しており、私はそれを _aligned_malloc に変更しました。私の問題は、sizeof(CLHLockStruct) が 2 のべき乗でないことです。 2 の累乗。
彼らはより良いアプローチですか?
編集1
サイズが 2 の累乗になるように、この構造体をパディングするにはどうすればよいですか?
EDIT2
_aligned_malloc および malloc のように機能する関数はありますか: block_size の倍数にアラインされたメモリ ポインターを返しますが、バイトが 2 の累乗である必要はありませんか?