gpt4 book ai didi

c++ - 对象数组对齐用__attribute__aligned() 还是alignas()?

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

快速提问,伙计们...这些代码 spines 是否具有相同的对齐方式?

struct sse_t {
float sse_data[4];
};

// the array "cacheline" will be aligned to 64-byte boundary
struct sse_t alignas(64) cacheline[1000000];

或者

// every object of type sse_t will be aligned to 64-byte boundary
struct sse_t {
float sse_data[4];
} __attribute((aligned(64)));

struct sse_t cacheline[1000000];

最佳答案

Are these code spinets have the same alignment ?

不完全是。您的两个示例实际上非常不同。

在您的第一个示例中,您将获得一组 sse_t 对象。 sse_t 对象仅保证 4 字节对齐。但是由于整个数组对齐到 64 字节,每个 sse_t 对象都将正确对齐以进行 SSE 访问。

在您的第二个示例中,您强制每个 sse_t 对象对齐到 64 字节。但是每个 sse_t 对象只有 16 个字节。所以阵列将大 4 倍。 (您将在每个 sse_t 对象的末尾有 48 个字节的填充)。


struct objA {
float sse_data[4];
};
struct objB {
float sse_data[4];
} __attribute((aligned(64)));

int main(){
cout << sizeof(objA) << endl;
cout << sizeof(objB) << endl;
}

输出:

16
64

我很确定第二种情况不是您想要的。

关于c++ - 对象数组对齐用__attribute__aligned() 还是alignas()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12024286/

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