怎样编译&运行一个程序
内存里面存储的内容
- 指令(也称为text)
- 数据
- 全局/静态: 在程序运行之前分配
- 动态: 在程序运行期间分配
- 内存大小
- MIPS地址宽度位32位,可寻址的空间最多为232= 4G字节,因此内存最大为4G
- 字节地址从0x00000000 到0xFFFFFFFF
- 字地址从0x00000000 到0xFFFFFFFC
- 内存空间分4部分
- 代码段、全局数据段、动态数据段、保留段
MIPS内存映射
- 代码段存储机器语言程序,可储存256M字节代码
- 全局数据段存储全局变量,可被任意函数使用,可储存64K数据,使用全局指针$gp访问,初始化为0x10008000,这个指针在程序执行时保持不变,任何全局变量都可通过gp加减正负16位的偏移量来访问,偏移量在汇编时确定下来,所以gp这个初始值定义在全局数据段的中间,这样使用带常数偏移量的基址寻址模式就可以访问整个全局变量空间
- 动态数据段保存在堆和栈中,大概有2G字节空间,堆中数据可以按任意顺序使用和丢弃,在c中使用malloc语句,c++和java中使用new语句分配的内存都属于堆,栈主要用于过程调用,存储一些寄存器等等,以后进先出顺序访问,为了防止堆和栈增长到对方空间造成数据的破坏,堆从动态数据段的下方向上增长,栈从动态数据段的上方向下增长
- 保