#include <iostream>
using namespace std;
struct sse_t1 {
float sse_data[4];
};
// the array "cacheline" will be aligned to 64-byte boundary
struct sse_t1 alignas(64) cacheline1[1000000];
// every object of type sse_t will be aligned to 64-byte boundary
struct sse_t2 {
float sse_data[4];
} __attribute((aligned(64)));
struct sse_t2 cacheline2[1000000];
int main() {
cout << "sizeof(sse_t1) = " << sizeof(sse_t1) << endl;
cout << "sizeof(sse_t2) = " << sizeof(sse_t2) << endl;
cout << "array cacheline1 " << (((size_t)(cacheline1) % 64 == 0)?"aligned to 64":"not aligned to 64") << endl;
cout << "array cacheline2 " << (((size_t)(cacheline2) % 64 == 0)?"aligned to 64":"not aligned to 64") << endl;
cout << "cacheline1[0] - cacheline1[1] = " << (size_t)&(cacheline1[1]) - (size_t)&(cacheline1[0]) << endl;
cout << "cacheline2[0] - cacheline2[1] = " << (size_t)&(cacheline2[1]) - (size_t)&(cacheline2[0]) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHNzZV90MSB7CiAgICAgZmxvYXQgc3NlX2RhdGFbNF07Cn07CgovLyB0aGUgYXJyYXkgImNhY2hlbGluZSIgd2lsbCBiZSBhbGlnbmVkIHRvIDY0LWJ5dGUgYm91bmRhcnkKc3RydWN0IHNzZV90MSBhbGlnbmFzKDY0KSBjYWNoZWxpbmUxWzEwMDAwMDBdOwoKLy8gZXZlcnkgb2JqZWN0IG9mIHR5cGUgc3NlX3Qgd2lsbCBiZSBhbGlnbmVkIHRvIDY0LWJ5dGUgYm91bmRhcnkKc3RydWN0IHNzZV90MiB7CiAgICAgZmxvYXQgc3NlX2RhdGFbNF07Cn0gX19hdHRyaWJ1dGUoKGFsaWduZWQoNjQpKSk7CgpzdHJ1Y3Qgc3NlX3QyIGNhY2hlbGluZTJbMTAwMDAwMF07CgppbnQgbWFpbigpIHsKICAgIGNvdXQgPDwgInNpemVvZihzc2VfdDEpID0gIiA8PCBzaXplb2Yoc3NlX3QxKSA8PCBlbmRsOwogICAgY291dCA8PCAic2l6ZW9mKHNzZV90MikgPSAiIDw8IHNpemVvZihzc2VfdDIpIDw8IGVuZGw7CQogICAgCiAgICBjb3V0IDw8ICJhcnJheSBjYWNoZWxpbmUxICIgPDwgKCgoc2l6ZV90KShjYWNoZWxpbmUxKSAlIDY0ID09IDApPyJhbGlnbmVkIHRvIDY0Ijoibm90IGFsaWduZWQgdG8gNjQiKSA8PCBlbmRsOwogICAgY291dCA8PCAiYXJyYXkgY2FjaGVsaW5lMiAiIDw8ICgoKHNpemVfdCkoY2FjaGVsaW5lMikgJSA2NCA9PSAwKT8iYWxpZ25lZCB0byA2NCI6Im5vdCBhbGlnbmVkIHRvIDY0IikgPDwgZW5kbDsgICAgCgkKICAgIGNvdXQgPDwgImNhY2hlbGluZTFbMF0gLSBjYWNoZWxpbmUxWzFdID0gIiA8PCAoc2l6ZV90KSYoY2FjaGVsaW5lMVsxXSkgLSAoc2l6ZV90KSYoY2FjaGVsaW5lMVswXSkgPDwgZW5kbDsKICAgIGNvdXQgPDwgImNhY2hlbGluZTJbMF0gLSBjYWNoZWxpbmUyWzFdID0gIiA8PCAoc2l6ZV90KSYoY2FjaGVsaW5lMlsxXSkgLSAoc2l6ZV90KSYoY2FjaGVsaW5lMlswXSkgPDwgZW5kbDsJCgkKCXJldHVybiAwOwp9