电商网站开发报价,百度一下百度搜索入口,从零做网站,网站模板 源码之家1.什么叫地址对齐#xff1f; RISC 下使用访存指令读取或写入数据单元时#xff0c;目标地址必须是所访问之数据单元字节数的整数倍#xff0c;这个叫做地址对齐。 2.计算机主要的架构分哪两类#xff1f;及其地址对齐在两者的区别#xff1f; 计算机主要的架构就分为两类…1.什么叫地址对齐 RISC 下使用访存指令读取或写入数据单元时目标地址必须是所访问之数据单元字节数的整数倍这个叫做地址对齐。 2.计算机主要的架构分哪两类及其地址对齐在两者的区别 计算机主要的架构就分为两类复杂指令集计算机CISC和精简指令集计算机RISC。CISC最有代表性的架构就是x86RISC最有代表性的架构就是ARM。不管是什么架构对要访问的一定长度的数据的地址是有要求的比如要访问一个32位的整数那么这个数据必须最好存储在以4字节32/84对齐的地方。一般来说RISC对对齐要求的更严格些非对齐访问可能会带来性能上的损失。这对程序在不同架构间移植非常重要因为它极有可能导致你的程序崩溃。 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。 3.MIPS平台的地址对齐。 在 MIPS 平台上lh 读取一个半字时存储器的地址必须是 2 的整数倍 lw 读取一个字时存储器的地址必须是 4的整数倍 sd 写入一个双字时存储器的地址必须是 8 的整数倍。倘若访存时目标地址不对齐则会引起异常,典型的是系统提示“总线错误”后直接杀死进程。 直接贴代码 1 int main(void){ 2 unsigned int i 0x12345678;3 4 unsigned char *p (unsigned char *)i;5 *p 0x00;6 unsigned short *p1 (unsigned short *)(p1);7 *p1 0x0000;8 9 return 0;
10 } 最后两句代码从奇数边界去访问unsigned short型变量显然不符合对齐的规定。在X86上类似的操作只会影响效率但在MIPS或者SPARC上可能导致error因为它们要求必须字节对齐。转载于:https://www.cnblogs.com/nx520zj/p/5653461.html