Mic*_*ael 5 c++ architecture algorithm g++ memory-alignment
我的问题由两部分组成.
这是一个阳光下的虫子,有补丁还是我需要自己写一个memalign.
另外我有一个结构(不是我的代码):
typedef struct CLHLockStruct {
volatile CLHLockNode CACHE_ALIGN *Tail ;
volatile CLHLockNode CACHE_ALIGN *MyNode[N_THREADS] ;
volatile CLHLockNode CACHE_ALIGN *MyPred[N_THREADS] ;
} CLHLockStruct;
Run Code Online (Sandbox Code Playgroud)我在MVSC下编译(visual studio 2008):
CACHE_LINE_SIZE = 64
CACHE_ALIGN = __declspec(align(CACHE_LINE_SIZE))
N_THREADS = 8
sizeof(CLHLockStruct)=192
Run Code Online (Sandbox Code Playgroud)
该代码最初是为sparc架构编写的,我尝试将其迁移到MVSC而无需更改代码.
在他们的代码中他们使用memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)),并且我已将其更改为_aligned_malloc,我的问题是sizeof(CLHLockStruct)不是2的幂,我可能会写一些函数找到下一个数字是2的力量.
他们是更好的方法吗?
EDIT1
我如何填充这个结构,使其大小为2的幂?
EDIT2
是否有一个像_aligned_malloc和malloc一样的函数:返回一个与block_size的倍数对齐的内存指针,但不要求字节为2的幂?
小智 4
在他们的代码中,他们使用 memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)) ,我已将其更改为 _aligned_malloc ,我的问题是 sizeof(CLHLockStruct) 不是 2 的幂,
你把它改成了吗_aligned_malloc(CACHE_LINE_SIZE,sizeof(CLHLockStruct))
?是的,这会导致这个。_aligned_malloc
期望大小作为其第一个参数,对齐方式作为第二个参数,与 相反memalign
,因此您需要交换参数。大小不必是 2 的幂。
归档时间: |
|
查看次数: |
769 次 |
最近记录: |