单纯的cast肯定不会报错,只是deref时可能触发系统异常。也就是语言或者编译器无要求,只是硬件/os的要求。
x86是没问题的(只是默认情况下。有寄存器开关的),随便align。
windows下只有kerner driver或者少数的API对于传入的mem有align要求。API的align要求一般也是下层的kernel driver或者硬件引起的。不过这个传参的align和deref的align有差异。
SEM_NOALIGNMENTFAULTEXCEPT
https://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-seterrormode
ARM老版本之类的可能有问题
https://stackoverflow.com/questions/32062894/take-advantage-of-arm-unaligned-memory-access-while-writing-clean-c-code
已经式微/消失的SPARC也有align要求
https://docs.oracle.com/cd/E23824_01/html/819-3196/hwovr-1.html
【 在 Akyrum 的大作中提到: 】
: 我一直这么用,网卡、usb、pcie收到的数据转float*、double*、__m256*直接用没报错
--
修改:z16166 FROM 114.241.227.*
FROM 114.241.227.*