- #include <vector> 
- #include <iostream> 
-   
- using namespace std; 
-   
- template <typename T> 
- void log_alignment(const T* t) 
- { 
-   unsigned long long address = reinterpret_cast<unsigned long long>(t);   
-   
-   int max_alignment_check = 1024; 
-   for (; max_alignment_check>1; max_alignment_check/=2) 
-   { 
-     if (address % max_alignment_check == 0) 
-       break; 
-   } 
-   
-   std::cout << "Address 0x" << std::hex << address << " is " << std::dec << max_alignment_check << " bytes aligned.\n"; 
- } 
-   
- struct B { 
-   alignas(128) float data[32]; 
- }; 
-   
- int main() 
- { 
-   B b1; 
-   B* b_ptr = new B; 
-   B* b_arr = new B[2];   
-   std::vector<B> b_vec1(10); 
-   std::vector<B> b_vec2(10); 
-   B b2; 
-   
-   log_alignment(&b1); 
-   log_alignment(&b2); 
-   log_alignment(b_ptr); 
-   log_alignment(b_arr);   
-   log_alignment(b_vec1.data()); 
-   log_alignment(b_vec2.data()); 
- } 
				I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGxvZ19hbGlnbm1lbnQoY29uc3QgVCogdCkKewogIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHQpOyAgCgogIGludCBtYXhfYWxpZ25tZW50X2NoZWNrID0gMTAyNDsKICBmb3IgKDsgbWF4X2FsaWdubWVudF9jaGVjaz4xOyBtYXhfYWxpZ25tZW50X2NoZWNrLz0yKQogIHsKICAgIGlmIChhZGRyZXNzICUgbWF4X2FsaWdubWVudF9jaGVjayA9PSAwKQogICAgICBicmVhazsKICB9CgogIHN0ZDo6Y291dCA8PCAiQWRkcmVzcyAweCIgPDwgc3RkOjpoZXggPDwgYWRkcmVzcyA8PCAiIGlzICIgPDwgc3RkOjpkZWMgPDwgbWF4X2FsaWdubWVudF9jaGVjayA8PCAiIGJ5dGVzIGFsaWduZWQuXG4iOwp9CgpzdHJ1Y3QgQiB7CiAgYWxpZ25hcygxMjgpIGZsb2F0IGRhdGFbMzJdOwp9OwoKaW50IG1haW4oKQp7CiAgQiBiMTsKICBCKiBiX3B0ciA9IG5ldyBCOwogIEIqIGJfYXJyID0gbmV3IEJbMl07ICAKICBzdGQ6OnZlY3RvcjxCPiBiX3ZlYzEoMTApOwogIHN0ZDo6dmVjdG9yPEI+IGJfdmVjMigxMCk7CiAgQiBiMjsKCiAgbG9nX2FsaWdubWVudCgmYjEpOwogIGxvZ19hbGlnbm1lbnQoJmIyKTsKICBsb2dfYWxpZ25tZW50KGJfcHRyKTsKICBsb2dfYWxpZ25tZW50KGJfYXJyKTsgIAogIGxvZ19hbGlnbm1lbnQoYl92ZWMxLmRhdGEoKSk7CiAgbG9nX2FsaWdubWVudChiX3ZlYzIuZGF0YSgpKTsKfQ==