作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
快速提问,伙计们...这些代码 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/
我是一名优秀的程序员,十分优秀!