use std::mem;
fn main() {
const N: usize = 32;
let mut addrs = Vec::new();
for _ in 0..20 {
// Prevent optimization by taking raw pointers and using volatile reads
let arr: [u8; N] = [0; N];
let ptr = &arr as *const _ as usize;
unsafe { std::ptr::read_volatile(&ptr); }
addrs.push(ptr);
}
for (i, addr) in addrs.iter().enumerate() {
println!(
"{:2}: {:#x} aligned_to_usize = {}",
i,
addr,
addr % mem::align_of::<usize>() == 0
);
}
}
dXNlIHN0ZDo6bWVtOwoKZm4gbWFpbigpIHsKICAgIGNvbnN0IE46IHVzaXplID0gMzI7CgogICAgbGV0IG11dCBhZGRycyA9IFZlYzo6bmV3KCk7CgogICAgZm9yIF8gaW4gMC4uMjAgewogICAgICAgIC8vIFByZXZlbnQgb3B0aW1pemF0aW9uIGJ5IHRha2luZyByYXcgcG9pbnRlcnMgYW5kIHVzaW5nIHZvbGF0aWxlIHJlYWRzCiAgICAgICAgbGV0IGFycjogW3U4OyBOXSA9IFswOyBOXTsKICAgICAgICBsZXQgcHRyID0gJmFyciBhcyAqY29uc3QgXyBhcyB1c2l6ZTsKICAgICAgICB1bnNhZmUgeyBzdGQ6OnB0cjo6cmVhZF92b2xhdGlsZSgmcHRyKTsgfQoKICAgICAgICBhZGRycy5wdXNoKHB0cik7CiAgICB9CgogICAgZm9yIChpLCBhZGRyKSBpbiBhZGRycy5pdGVyKCkuZW51bWVyYXRlKCkgewogICAgICAgIHByaW50bG4hKAogICAgICAgICAgICAiezoyfTogezojeH0gICBhbGlnbmVkX3RvX3VzaXplID0ge30iLAogICAgICAgICAgICBpLAogICAgICAgICAgICBhZGRyLAogICAgICAgICAgICBhZGRyICUgbWVtOjphbGlnbl9vZjo6PHVzaXplPigpID09IDAKICAgICAgICApOwogICAgfQp9Cg==