vs下的字节对齐的一些疑问

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这些块读取的时候,一次读取无法完整读取到,需要俩次,这样效率低

也许这个思考过程是有问题的,但是 上面的程序可以重新找个理由去解释
大概我认为是个底层的问题,我们看到的是逻辑地址,所以出现问题应该从底层去解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值