#include <cstdio> // for printf.
#include <cstddef> // for size.
#include <cstdint> // for uintptr_t.
using namespace std;
void *alignment(void *p, std::size_t align_size)
{
std::uintptr_t i = reinterpret_cast<std::uintptr_t>(p);
i = (i + (align_size - 1)) / align_size * align_size;
return reinterpret_cast<void *>(i);
}
int main()
{
void *p = reinterpret_cast<void *>(33);
std::printf("%p\n", p);
auto *p32 = alignment(p, 32);
std::printf("%p\n", p32);
getchar();
}
I2luY2x1ZGUgPGNzdGRpbz4gICAgLy8gZm9yIHByaW50Zi4KI2luY2x1ZGUgPGNzdGRkZWY+CS8vIGZvciBzaXplLgojaW5jbHVkZSA8Y3N0ZGludD4JLy8gZm9yIHVpbnRwdHJfdC4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgKmFsaWdubWVudCh2b2lkICpwLCBzdGQ6OnNpemVfdCBhbGlnbl9zaXplKQp7CglzdGQ6OnVpbnRwdHJfdCBpID0gcmVpbnRlcnByZXRfY2FzdDxzdGQ6OnVpbnRwdHJfdD4ocCk7CglpID0gKGkgKyAoYWxpZ25fc2l6ZSAtIDEpKSAvIGFsaWduX3NpemUgKiBhbGlnbl9zaXplOwoKCXJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQgKj4oaSk7Cn0KCmludCBtYWluKCkKewoJdm9pZCAqcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPigzMyk7CglzdGQ6OnByaW50ZigiJXBcbiIsIHApOwoKCWF1dG8gKnAzMiA9IGFsaWdubWVudChwLCAzMik7CglzdGQ6OnByaW50ZigiJXBcbiIsIHAzMik7CgoJZ2V0Y2hhcigpOwp9Cgo=