double p= 0;
double a = (int)(&p);
int *aa = (int *)&p;
double b = (int)(aa);
printf("%d %lf %lf\n", aa,b,b/8);
这里输出 b/8 有时候会输出非整数(.5)
这里理解为地址都是逻辑地址 如果逻辑地址起始地实际地址也是个 b/8非整数(.5)
那就对了,double要放在起始地址,这个起始地址的物理地址能被8整出。
如果double类型变量起始地址的物理地址不能被8整出,读取的时候按2,4,8,16这些块读取的时候,一次读取无法完整读取到,需要俩次,这样效率低
也许这个思考过程是有问题的,但是 上面的程序可以重新找个理由去解释
大概我认为是个底层的问题,我们看到的是逻辑地址,所以出现问题应该从底层去解决。