#include <Eigen/Core>
#include <vector>
#include <iostream>
using namespace std;
using namespace Eigen;
template <typename T>
void log_alignment(const T* t)
{
unsigned long long address = reinterpret_cast<unsigned long long>(t);
int max_alignment_check = 256;
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 << " bit aligned.\n";
}
struct B
{
char c;
Vector4f a;
};
int main()
{
B b;
B* b_ptr = new B;
B* b_arr = new B[10];
std::vector<B> b_vec(10);
log_alignment(&b);
log_alignment(b_ptr);
log_alignment(b_arr);
log_alignment(b_vec.data());
}
I2luY2x1ZGUgPEVpZ2VuL0NvcmU+CgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgRWlnZW47Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBsb2dfYWxpZ25tZW50KGNvbnN0IFQqIHQpCnsKICB1bnNpZ25lZCBsb25nIGxvbmcgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih0KTsgIAoKICBpbnQgbWF4X2FsaWdubWVudF9jaGVjayA9IDI1NjsKICBmb3IgKDsgbWF4X2FsaWdubWVudF9jaGVjaz4xOyBtYXhfYWxpZ25tZW50X2NoZWNrLz0yKQogIHsKICAgIGlmIChhZGRyZXNzICUgbWF4X2FsaWdubWVudF9jaGVjayA9PSAwKQogICAgICBicmVhazsKICB9CgogIHN0ZDo6Y291dCA8PCAiQWRkcmVzcyAweCIgPDwgc3RkOjpoZXggPDwgYWRkcmVzcyA8PCAiIGlzICIgPDwgc3RkOjpkZWMgPDwgbWF4X2FsaWdubWVudF9jaGVjayA8PCAiIGJpdCBhbGlnbmVkLlxuIjsKfQoKc3RydWN0IEIKewogIGNoYXIgYzsKICBWZWN0b3I0ZiBhOwp9OwoKaW50IG1haW4oKQp7CiAgQiBiOwogIEIqIGJfcHRyID0gbmV3IEI7CiAgQiogYl9hcnIgPSBuZXcgQlsxMF07ICAKICBzdGQ6OnZlY3RvcjxCPiBiX3ZlYygxMCk7CgogIGxvZ19hbGlnbm1lbnQoJmIpOwogIGxvZ19hbGlnbm1lbnQoYl9wdHIpOwogIGxvZ19hbGlnbm1lbnQoYl9hcnIpOyAgCiAgbG9nX2FsaWdubWVudChiX3ZlYy5kYXRhKCkpOwp9Cg==