gpt4 book ai didi

c++ - 内存对齐 - Sparc(Sun) cc 编译器、Intel(Linux) g++ 编译器、Intel(Windows) MVSC 编译器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:48 26 4
gpt4 key购买 nike

我的问题由两部分组成。

  1. 我注意到使用 cc 编译器的 sparc(sun) 上的 memalign(block_size,bytes) 不检查字节是否为 2 的幂,这与使用 mvsc 编译器的 intel linux 上的 memalign 和 Windows 上的 _aligned_malloc 进行检查相反字节是 2 的幂。

这是 sun 中的错误,是否有补丁,或者我需要自己编写一个 memalign。

  1. 另外我有一个结构(不是我的代码):

    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 的幂?

EDIT2

是否有一个功能类似于 _aligned_malloc 和 malloc:返回一个与 block_size 的倍数对齐但不要求字节为 2 的幂的内存指针?

最佳答案

in their code they use memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)), and i have changed it to _aligned_malloc , my problem is that sizeof(CLHLockStruct) is not a power of 2,

您是否将其更改为 _aligned_malloc(CACHE_LINE_SIZE,sizeof(CLHLockStruct))?是的,那会导致这个。 _aligned_malloc期望大小作为其第一个参数,对齐方式作为第二个参数,与 memalign 相反,因此您需要交换参数。大小不需要是 2 的幂。

关于c++ - 内存对齐 - Sparc(Sun) cc 编译器、Intel(Linux) g++ 编译器、Intel(Windows) MVSC 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com