结构体中内存对齐的一些

mac2024-11-18  16

今天任同学说的,如果是结构体,即便是按字节寻址哈,也要先访问结构体的首地址,然后,

假如struct GY

{

char c;

int a;

}

意思是什么呢

你访问GY.a时其实按树形结构结构体跟文件或者名空间没啥区别哈

GY.a你既然先从GY访问了 那么必须要先访问结构体整体的首地址。

然后你不是想访问a那一片空间吗,a那一片空间是四字节的,那数据总线如果32位,就会按偏移量说哈就是0字节到3字节

哎 发现a还有一字节的空间没有取到,还要在利用32位总线取一次,因为你要取的a是四字节的指针内部偏移量也会是四个字节四个字节的偏,所以要补三个字节,直接哎 四个四个的跳跳到a的首地址了

然后一次取四个字节就是完整a了,否则之间取两次还要剔除还要拼凑

 

//

再来说32位OS和64位OS哈,64位OS是指你软件层面一次处理64位或32位,

当然硬件要跟上,你软件一次处理64位机器字长 数据总线仍是32位,那实际仍然没啥用还是分两次,

那如果你OS 64位 机器字长64位,你物理上一次处理64位软件上或者说指令上也是 那速度就很快了 我们知道每增加一位,表示状态数就乘2,那可以代表的信息量也就是二倍了理论上,对实时计算量大的很有帮助,比如游戏渲染,建模涉及很多矩阵运算,很很多顶点变换 而且是每帧都要变换,那速度基本上真的就可以提升一倍了。相当于一个指令周期计算给二倍顶点进行顶点变换计算了,能不快吗。

那假如32 位OS (其实也类似操作的数据结构或者说数据类型单位是32位)用在32位机器那正好,32位OS用在64位机器上

怎么说呢有点机器在等你的味道,浪费机器性能,你上层执行一条程序语句物理上都取俩个数了 物理在等着你程序执行的感觉 但因为是按程序一步一步执行的

所以我感觉除非是32位硬件处理不过来了否则没什么区别 否则与软件无障碍推行速度一样,不过有一个好处是,可能程序执行会很顺畅游刃有余没有阻碍

 

64为OS用在32位机器是程序在等待物理

32位OS用在64位机器是物理在等程序 理论上我猜速度一样

 

最新回复(0)