不仅仅是compiler 的问题。32bit 的 x86 因为历史兼容关系(兼容8088, 8086, 80386, 80486...),可以access 8bit, 16-bit 数据,若不对齐,只是多出一次存取而已。ptr = (u32*)(pbuf + 3), ptr 的地址可以是 pbuf+3.
但很多其他的 16-bit, 32-bit cpu,16bit, 32bit 无法被分割,即必须对齐,这时 ptr = (u32*)(pbuf + 3),ptr 的地址是 pbuf 或者是(u32*)pbuf +3 (这里的u08 实际上是 32-bit, 因为此cpu 没有8bit的内部register, char 被当作32bit 处理) , 或者compiler直接给出编译警告或错误.
|