我的问题由两部分组成。
- 我注意到带有 cc 编译器的 sparc(sun) 上的 memalign(block_size,bytes) 不会检查字节是 2 的幂,而不是 intel linux 上的 memalign 和带有 mvsc 编译器的 windows 上的 _aligned_malloc 会检查字节是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 (visual studio 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 的幂?
编辑2
是否有类似 _aligned_malloc 和 malloc 的函数:返回与 block_size 的倍数对齐但不要求字节为 2 的幂的内存指针?