我将内存填充如下:
char buf[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
然后将 unsigned long 指针依次放在前 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
IE。它每 4 个字节绑定一次,并且在此范围内仅取消引用 4 个字节。
所以我想问,这种行为是否(当pointer_value%4 != 0
)错误或特定于实现?
更新:
我知道字节序,我想知道这是正确的,我得到
11443322
代替
55443322
例如,当我有指针时0x10000001
它从带有地址的字节中生成无符号长整型0x10000001
, 0x10000002
, 0x10000003
然后0x10000000
, 代替0x10000005
.