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

Yes. I can't remember where I got this code from. I think it might have been Herb Sutter's blog:

    #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

これは簡単です。の「ed」を見逃してしまったのかもしれませんaligned

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

} my_type;

変数またはその配列を作成すると、結果の構造体には b の後に 56 バイトのパディングが含まれます。

于 2012-04-13T18:12:36.973 に答える