我想实现这样的目标:
#[repr(align(4))] const SPV_CODE: &[u8] = include_bytes!('my-shader.spv');
如何确保常量与四的乘数地址对齐?编辑:为了清楚起见,我希望嵌入的字节本身对齐为4个字节。
jyztefdp1#
您可以使用一个只包含这个切片的特定结构(或者一个数组,我不知道您需要什么),然后将对齐约束放在该结构上。因为我不知道你是否想对齐切片(即胖指针)或其引用(指向)的所包括字节,请找到以下两个解决方案以表达对齐约束。
#[repr(align(64))] struct SpvCodeSlice<'a>(&'a [u8]); const SPV_CODE_SLICE: SpvCodeSlice = SpvCodeSlice(include_bytes!("my-shader.spv")); fn show_slice_alignment() { let slice_struct_ptr = &SPV_CODE_SLICE as *const _; let slice_bytes_ptr = SPV_CODE_SLICE.0.as_ptr(); println!("slice_struct_ptr: {:?}", slice_struct_ptr); println!("slice_bytes_ptr: {:?}", slice_bytes_ptr); let slice_struct_addr = slice_struct_ptr as usize; let slice_bytes_addr = slice_bytes_ptr as usize; println!("slice_struct_addr%64: {:?}", slice_struct_addr % 64); // zero every time println!("slice_bytes_addr%64: {:?}", slice_bytes_addr % 64); // not zero! } #[repr(align(64))] struct SpvCodeArray<const N: usize>([u8; N]); const BYTES_LEN: usize = include_bytes!("my-shader.spv").len(); const SPV_CODE_ARRAY: SpvCodeArray<BYTES_LEN> = SpvCodeArray(*include_bytes!("my-shader.spv")); fn show_array_alignment() { let array_struct_ptr = &SPV_CODE_ARRAY as *const _; let array_bytes_ptr = SPV_CODE_ARRAY.0.as_ptr(); println!("array_struct_ptr: {:?}", array_struct_ptr); println!("array_bytes_ptr: {:?}", array_bytes_ptr); let array_struct_addr = array_struct_ptr as usize; let array_bytes_addr = array_bytes_ptr as usize; println!("array_struct_addr%64: {:?}", array_struct_addr % 64); // zero every time println!("array_bytes_addr%64: {:?}", array_bytes_addr % 64); // zero every time } fn main() { show_slice_alignment(); println!("~~~~"); show_array_alignment() } /* slice_struct_ptr: 0x55e10101d1c0 slice_bytes_ptr: 0x55e10100f05b slice_struct_addr%64: 0 slice_bytes_addr%64: 27 ~~~~ array_struct_ptr: 0x55e10100f100 array_bytes_ptr: 0x55e10100f100 array_struct_addr%64: 0 array_bytes_addr%64: 0 */
1条答案
按热度按时间jyztefdp1#
您可以使用一个只包含这个切片的特定结构(或者一个数组,我不知道您需要什么),然后将对齐约束放在该结构上。
因为我不知道你是否想对齐切片(即胖指针)或其引用(指向)的所包括字节,请找到以下两个解决方案以表达对齐约束。