4

我知道您可以通过在 gcc 中使用例如属性((align(64)))将变量与缓存行对齐。但是,我对在结构声明时对齐(或者您可以将其称为填充)感兴趣。因此,例如,对于以下结构,我想要求编译器创建必要的填充,以便此结构的任何对象始终与缓存行对齐。

typedef struct
{
 int a;
 int b;
 // I want the compiler to create a padding here for cache alignment
} my_type;
4

2 回答 2

3

是的。我不记得我从哪里得到这个代码。我想可能是 Herb Sutter 的博客:

    #define CACHE_LINE_SIZE 64 // Intel Core 2 cache line size.

    template<typename T>
    struct CacheLineStorage {

    public:

       [[ align(CACHE_LINE_SIZE) ]] T data;

    private:

       char pad[ CACHE_LINE_SIZE > sizeof(T)
            ? CACHE_LINE_SIZE - sizeof(T)
            : 1 ];
    };
于 2012-04-13T16:15:01.547 回答
2

这很简单。您可能只是错过了aligned.

typedef struct
{
 int a __attribute__((aligned(64)));
 int b;

} my_type;

如果您创建变量或它的数组,则生成的结构在 b 之后将有一个 56 字节的填充。

于 2012-04-13T18:12:36.973 回答