1.回顾
存储在磁盘中的叫节,映射到内存的时候叫段。
内存中的节根据读写执行的权限不同在内存中映像为不同的段。
段视图用于进程的内存区域的rwx权限划分。
节视图用于ELF文件编译链接时与在磁盘上储存时的文件结构的组织。
2.代码在内存重的映射关系
不可写的数据一般会被放在代码段、可读的被放在数据段。
#include<stdio.h>
int glb;
// 全局变量,并没有初始化,(被存在Bss中),所以在磁盘中并不占用空间,运行的时候可能会占用内存空间。
char *str = "hello world!";
// 在源代码中写死了,只读不可写不可执行。str在data段、内容在Text段
int sum(int x, int y)
{
int t = x + y;
}
//sum函数,被编译后还是数据,只不过这个数据是机器码,代码也是数据放在Text段。
//sum中的t局部变量放在程序执行栈中。Stack
//x,y具体占用内存空间是不一定的,跟指令集有关,x86和amd64
//x86 占用stack空间
//amd64 占用cpu寄存器空间
int main()
//main函数也是函数放到Text中以机器码的形式存放。
{
sum(1, 2);//函数调用,存在栈中(Stack)
void *ptr = malloc(0x100);//局部变量,放栈中,malloc申请空间。放到heap(堆)中
read(0, ptr, 0x100); // input "deadbeef"
//这个字符串会被写入到heap中
return 0;
//到此程序结束
}
3.大端序 小端序
大端序与小端序
下图中地址高低是上高下低
下图中地址是上底下高
4.进程的执行过程
cpu中有一组寄存器,reg。
CPU与内存沟通的渠道是地址总线,数据总线,指令。CPU向内存发送访存指令。
为什么cpu要有寄存器?
距离cpu最近的存储器速度越快,容量越小,价格越贵,
直接嵌套在cpu中的存储器:寄存器reg
PC:(amd64 - rip)保存当前内存中的代码段正在执行的代码地址。
它所指向的指令会被传送到cpu中执行。
大致执行过程:
内存把一条一条的代码和数据给cpu,cpu把指令执行完后把所需要的数据返回给内存。
5.寄存器
其中,r开头的寄存器,表示64位,8比特。