我按如下方式填充内存:
char buf[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
然后将无符号长指针依次放在前 5 个字节上并输出结果:
char *c_ptr;
unsigned long *u_ptr;
c_ptr = buf;
for (int i=0;i<5;i++)
{
u_ptr = (unsigned long *)c_ptr;
printf("%X\n",*u_ptr);
c_ptr++;
}
当我在 x64 平台上执行此代码时,我得到了我的预期:
44332211
55443322
66554433
77665544
88776655
但是当我在 ARM 平台上执行相同的代码时,我得到以下信息:
44332211
11443322
22114433
33221144
88776655
即,它每 4 个字节绑定一次,并且在此范围内仅取消引用 4 个字节。
所以我想问一下,这种行为(何时pointer_value%4 != 0
)是错误的还是特定于实现的?
UPD:我知道字节序,我想知道这是正确的,我得到了
11443322
代替
55443322
即,例如,当我有指针时,0x10000001
它会从具有地址 , 和 than 的字节中生成 unsigned 0x10000001
long ,0x10000002
而不是.0x10000003
0x10000000
0x10000005