【发布时间】:2012-08-05 05:08:44
【问题描述】:
我的问题由两部分组成。
- 我注意到带有 cc 编译器的 sparc(sun) 上的 memalign(block_size,bytes) 不会检查字节是 2 的幂,而英特尔 Linux 上的 memalign 和带有 mvsc 编译器的 Windows 上的 _aligned_malloc 会检查字节是 2 的幂。
这是sun中的一个错误,是否有补丁或者我需要自己编写一个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 的幂的数字。
他们是更好的方法吗?
EDIT1
我如何填充这个结构,使其大小成为 2 的幂?
EDIT2
是否有类似 _aligned_malloc 和 malloc 的函数:返回与 block_size 的倍数对齐但不要求字节为 2 的幂的内存指针?
【问题讨论】:
-
cc是 linux 上的符号链接。什么是编译器,哪个版本? -
对不起,我有一个小错误,linux上的编译器是g++(gcc版本4.4.3)我已经编辑了标题并添加了一个标签
标签: c++ algorithm architecture g++ memory-alignment