use std::mem;
fn main() {
const N: usize = 32;
const BIG: usize = N + 1;
// Local array on the stack
let big = [0u8; BIG];
// Base address of the large array
let base = big.as_ptr() as usize;
println!(
"base addr: {:#x}, base % align_of::<usize>() = {}",
base,
base % mem::align_of::<usize>()
);
// Take a pointer to big[1] and reinterpret it as &[u8; N]
let arr_ptr = unsafe { big.as_ptr().add(1) as *const [u8; N] };
let arr_addr = arr_ptr as usize;
let aligned = arr_addr % mem::align_of::<usize>() == 0;
println!(
"arr addr: {:#x}, aligned_to_usize = {}",
arr_addr,
aligned
);
// Optional: actually create a reference to the array
let _arr_ref: &[u8; N] = unsafe { &*arr_ptr };
println!("align_of::<[u8; N]>() = {}", mem::align_of::<[u8; N]>());
println!("align_of::<usize>() = {}", mem::align_of::<usize>());
}
dXNlIHN0ZDo6bWVtOwoKZm4gbWFpbigpIHsKICAgIGNvbnN0IE46IHVzaXplID0gMzI7CiAgICBjb25zdCBCSUc6IHVzaXplID0gTiArIDE7CgogICAgLy8gTG9jYWwgYXJyYXkgb24gdGhlIHN0YWNrCiAgICBsZXQgYmlnID0gWzB1ODsgQklHXTsKCiAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIGxhcmdlIGFycmF5CiAgICBsZXQgYmFzZSA9IGJpZy5hc19wdHIoKSBhcyB1c2l6ZTsKICAgIHByaW50bG4hKAogICAgICAgICJiYXNlIGFkZHI6IHs6I3h9LCBiYXNlICUgYWxpZ25fb2Y6Ojx1c2l6ZT4oKSA9IHt9IiwKICAgICAgICBiYXNlLAogICAgICAgIGJhc2UgJSBtZW06OmFsaWduX29mOjo8dXNpemU+KCkKICAgICk7CgogICAgLy8gVGFrZSBhIHBvaW50ZXIgdG8gYmlnWzFdIGFuZCByZWludGVycHJldCBpdCBhcyAmW3U4OyBOXQogICAgbGV0IGFycl9wdHIgPSB1bnNhZmUgeyBiaWcuYXNfcHRyKCkuYWRkKDEpIGFzICpjb25zdCBbdTg7IE5dIH07CiAgICBsZXQgYXJyX2FkZHIgPSBhcnJfcHRyIGFzIHVzaXplOwogICAgbGV0IGFsaWduZWQgPSBhcnJfYWRkciAlIG1lbTo6YWxpZ25fb2Y6Ojx1c2l6ZT4oKSA9PSAwOwoKICAgIHByaW50bG4hKAogICAgICAgICJhcnIgYWRkcjogIHs6I3h9LCBhbGlnbmVkX3RvX3VzaXplID0ge30iLAogICAgICAgIGFycl9hZGRyLAogICAgICAgIGFsaWduZWQKICAgICk7CgogICAgLy8gT3B0aW9uYWw6IGFjdHVhbGx5IGNyZWF0ZSBhIHJlZmVyZW5jZSB0byB0aGUgYXJyYXkKICAgIGxldCBfYXJyX3JlZjogJlt1ODsgTl0gPSB1bnNhZmUgeyAmKmFycl9wdHIgfTsKCiAgICBwcmludGxuISgiYWxpZ25fb2Y6OjxbdTg7IE5dPigpICAgPSB7fSIsIG1lbTo6YWxpZ25fb2Y6OjxbdTg7IE5dPigpKTsKICAgIHByaW50bG4hKCJhbGlnbl9vZjo6PHVzaXplPigpICAgICA9IHt9IiwgbWVtOjphbGlnbl9vZjo6PHVzaXplPigpKTsKfQo=