浅谈MIPS地址对齐问题

1.什么叫地址对齐?

RISC 下使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍,这个叫做地址对齐。

2.计算机主要的架构分哪两类?及其地址对齐在两者的区别?

计算机主要的架构就分为两类,复杂指令集计算机(CISC)和精简指令集计算机(RISC)。CISC最有代表性的架构就是x86,RISC最有代表性的架构就是ARM。不管是什么架构,对要访问的一定长度的数据的地址是有要求的,比如要访问一个32位的整数,那么这个数据必须(最好)存储在以4字节(32/8=4)对齐的地方。一般来说,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 *)(p+1);7     *p1 = 0x0000;8 9     return 0;
10 }
 最后两句代码,从奇数边界去访问unsigned short型变量,显然不符合对齐的规定。在X86上,类似的操作只会影响效率;但在MIPS或者SPARC上可能导致error,因为它们要求必须字节对齐。



转载于:https://www.cnblogs.com/nx520zj/p/5653461.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海信FW3010-5000H千兆防火墙

海信FW3010-5000H千兆防火墙 ◆处理带宽达到3G; ◆支持1,500,000个并发连接; ◆支持高达25,000个高级访问过滤; ◆真正的千兆硬件平台; ◆双机热备功能; ◆完善的日志信息; ◆支持P2P过滤,多达14种P2P识别; ◆特有的灾难恢复机制; ◆内嵌IDS模块,也可和…

java File类 打印目录树状结构(递归)

import java.io.File;/*** 递归遍历**/ public class FieTree {public static void main(String[] args) {File f new File("D:/java笔记");printFile(f,0);}static void printFile(File file,int level){for(int i0;i<level;i){System.out.print("-")…

C++ vector.insert的用法

insert() 函数有以下三种用法: 在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 在指定位置loc前插入num个值为val的元素 在指定位置loc前插入区间[start, end)的所有元素 .&#xff0c;查看源码返回元素的大小个数 原函数 iterator insert(const_iterator…

学习笔记(44):Python实战编程-单击事件

立即学习:https://edu.csdn.net/course/play/19711/343106?utm_sourceblogtoedu 1.单击事件&#xff1a;主要的单击事件是鼠标左键单击事件&#xff0c;一般是与按钮绑定在一起 2.关键代码&#xff1a;这里是以按钮绑定组件单击事件为例&#xff0c;单击的响应是弹出简单的对话…

samba

安装配置samba&#xff1a; 准备工作&#xff1a; 173/udp(NetBIOS) 138/udp 139/tcp 445/tcp 这些端口已经启动。 然后确定selinux已经关闭&#xff08;#getenforce&#xff09;。 一般我们装好系统之后samba都会安装的&#xff1a;yum list all samba* 这里我选用的是samba3x…

(1)dotnet开源电商系统-brnshopbrnMall 和老外开发的nopCommerce(dotnet两套电商来PK--第一篇)...

一直想做电商软件&#xff0c;但是实在不想学PHP了&#xff0c;所以前后关注了这两个开源电商系统。一个是国人出品的&#xff0c;一个据说是俄罗斯人写得&#xff08;不知道对不对&#xff09;。目前两个开源软件都在学习了解中&#xff0c;以下的博文可能会涉及到这两套系统&…

hdoj 2022 海选女主角

Problem Descriptionpotato老师虽然很喜欢教书&#xff0c;但是迫于生活压力&#xff0c;不得不想办法在业余时间挣点外快以养家糊口。“做什么比较挣钱呢&#xff1f;筛沙子没力气&#xff0c;看大门又不够帅...”potato老师很是无奈。“张艺谋比你还难看&#xff0c;现在多有…

linux 下的gettimeofday 函数在windows上的替换方案

方案一&#xff1a; #include <time.h> #ifdef WIN32 # include <windows.h> #else # include <sys/time.h> #endif #ifdef WIN32 int gettimeofday(struct timeval *tp, void *tzp) { time_t clock; struct tm tm; SYSTEMTIME wtm; Ge…

学习笔记(45):Python实战编程-键盘事件

立即学习:https://edu.csdn.net/course/play/19711/343107?utm_sourceblogtoedu 1.键盘事件&#xff1a;按键松开或者按下触发事件的执行&#xff0c;一般组件要绑定键盘事件都是同时绑定按键松开&#xff08;“”<KeyRelease>&#xff09;和按键按下&#xff08;“<…

JSDoc那些事

几天工作上需要文档化一些Javascript东西&#xff0c;所以在找一些JS文档化工具&#xff0c;以下分析几种工具。 1.JSDoc-toolkit 一开始还想用这个工具&#xff0c;但后来在解析生成文档时候&#xff0c;出现了很严重的错误&#xff0c;还存在其他问题。 问题1&#xff1a;闭包…

onBlur事件与onfocus事件(js)

onFocus事件就是当光标落在文本框中时发生的事件。 onBlur事件是光标失去焦点时发生的事件。 可以编如下例子 1.html <HTML> <HEAD> <TITLE>使用onBlur事件处理程序</TITLE> </HEAD> <BODY BGCOLOR"lavender"> <FORM name&qu…

谈论Java原子变量和同步的效率 -- 颠覆你的生活

我们认为&#xff0c;由于思维定式原子变量总是比同步运行的速度更快&#xff0c;我想是这样也已经&#xff0c;直到实现了ID在第一次测试过程生成器不具有在这样一个迷迷糊糊的东西。测试代码&#xff1a; import java.util.ArrayList; import java.util.List; import java.ut…

总结从linux - windows 上(GCC与MSVC 2015) 移植C或者C++代码时候遇到的编译和链接问题

解决办法和修改办法的总体思想 1、在代码的语义和功能不变的情况下&#xff0c;进行c->c的转变&#xff0c;消除编译器的跨平台编译报错问题&#xff1b; 2、遇到编译问题&#xff0c;先看编译器提示信息&#xff0c;然后逐个排查和定位&#xff0c;去解决问题。 1、当遇到…

1 week110的zookeeper的安装 + zookeeper提供少量数据的存储

下面是在weekend110上的zookeeper的安装 在此之前&#xff0c;先进行快照备份。 在这里&#xff0c;为了后续的zookeeper配置需要&#xff0c;在/home/hadoop/下&#xff0c;新建data目录&#xff0c;再新建zookeeper-3.4.6目录&#xff0c;再新建zkdata目录。 默认情况下&…

学习笔记(46):Python实战编程-protocol

立即学习:https://edu.csdn.net/course/play/19711/343108?utm_sourceblogtoedu 1.protocol协议&#xff1a;主要用于窗体关闭监听&#xff0c;通过这个协议可以在窗体关闭前提示是否真的要关闭&#xff0c;这样可以防止用户误触导致数据的丢失 2.关键代码 #----------------…

linux yum命令详解

yum&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;可以自动处理依赖性关系&#xff0c;并且一次安装所有依赖的软体包…

linux配置Java环境变量(详细)

一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录&#xff0c; 执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议&#xff0c;连继敲回车&#xff0c;当询问是否同意的时候&#xff0c;输入yes&#xff0c;回车。之后会在当前目录下生成一个jdk1.…

在c++代码中关闭和启动另外一个pid进程号,共享内存数据使用

char * of_program_name "./AB"; 1、 pid getPidFromName(of_program_name); if (pid > 0) { ERROR("AB process still exispid %d\n", pid); if (kill(pid, SIGKILL)) //杀死进程 { fprintf(std…

提速XP操作系统

1、加速网上邻居 在Windows XP中访问网上邻居是相当恼人的&#xff0c;系统会搜索自己的共享目录和可作为网络共享的打印机以及计划任务中和网络相关的计划任务&#xff0c;然后才显示出来&#xff0c;显然这样速度就会比Windows 9x中慢很多。其实这些功能我们并没有使用上&…

学习笔记(47):Python实战编程-pack布局

立即学习:https://edu.csdn.net/course/play/19711/343109?utm_sourceblogtoedu pack布局&#xff1a; 1&#xff09;最常用的布局&#xff0c;顺序排列布局方法 2&#xff09;完成了简单的组件位置码放&#xff0c;但如果内部布局处理机制跟不上的话&#xff0c;也可能会达…