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

标签 c++ algorithm architecture g++ memory-alignment

我的问题由两部分组成。

  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/

相关文章:

c++ - 在不使用 C 字符串函数的情况下从 C 字符串中删除元音

c++ - 在 C++ 中包装可执行文件的输入和输出

architecture - 是否有任何电子表格使用公式存储库而不是直接在单元格中写入多个副本?

azure - Azure 应用服务与 AD 的集成

c++ - 如何在 C++ 中将字符串传递给 const char*?

c++ - WINAPI - 我想在一个单独的线程中进行消息泵

c# - 我在 C# 中选择 k 元素子集来处理大量数据的算法

algorithm - 有没有 "special"人脸案例的图片压缩算法?

algorithm - 堆栈复杂度

oop - 域驱动的设计概念