目录
linux系统内存分布图:
linux系统使用的是虚拟内存,不是真是的为物理地址(linux中使用虚拟内存,虚拟内存和物理内存的转换通过MMU硬件来实现。)
1:保留区:
空间啊128M(大小)
2: 代码段:
3: 程序由数据以及指令组成
代码段存储的是编译器对程序编译之后生成的二进制指令,代码段分为两部分,分别是.text段
和.init段。(.text段用于存储用户程序生成的指令,.init段用于存储系统初始化的指令,这两部分的属性 是只读的,在程序运行之后代码段中的数据就不应该再被修改。在程序运行之前代码段的内存空间就已经被内 核计算完成。)---存储指令 只读不能改变特性
4:数据段:(静态分布区)
数据存储在两部分,一个部分是栈空间,另一个部分是数据段
.bss:用于存储程序中未被初始化的全局变量以及未被初始化的静态局部变量以及初始化为0的全局变量和初始化为0的静态局部变量。(int a; staic int a; int a=0; staic int a=0) ----可以初始化为0
.data段:用于存储程序中的已经被初始化的全局变量和已经被初始化的静态局部变量,另外注意初始化的值不能为0!(int a=5; 和staic int a=5; 初始化不能为0)
.rodata段:被称为只读常量区,程序中的常量(整型常量、字符串常量)都是存储在该区域,对于该区域的属性是只读的,当程序结束后该区域的内存会被释放。----(存储常量的区域)
堆:匿名内存,动态分配空间,由程序员自己申请,内存空间向上扩展,只能用指针来访问。
栈(stack):由系统自动分配空间,栈的内存向下扩展。(也是线性结构)
5:栈:
(栈就好像一个瓶子倒过来的,栈顶可以变化,栈低地址不变。(数据先进后出(入栈),后出先出(出栈))
6:内核(kernel):映射到进程虚拟内存,但程序无法访问(不允许用户访问的位置)
作业1:
作业2:
作业3:
作业4:
作业5:
作业6: