初步了解x86结构

一、冯·诺依曼体系结构是怎样的?

1.有主存,用来存放程序和数据。  程序、数据的最终形态都是二进制编码,程序和数据都是以二进制方式存储在存储器中的,二进制 编码也是计算机能够所识别和执行的编码。
2. 程序、数据和指令序列,都是事先存在主(内)存储器中,以便于计算机在工作时能够高速地从存 储器中提取指令并加以分析和执行。
3. 确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备
4. 各基本部件的功能是:

    存储器不仅能存放数据,而且也能存放指令,形式上两者 没有区别,但计算机应能区分数据还是指令;

    控制器应能自动取出指令来执行;

    运算器应能进行加/减/乘/除四种基本算术运算,并且也 能进行一些逻辑运算和附加运算;

    操作人员可以通过输入设备、输出设备和主机进行通信。

内部以二进制表示指令和数据。每条指令由操作码和地址码 两部分组成。操作码指出操作类型,地址码指出操作数的地 址。由一串指令组成程序。

初步了解x86结构_第1张图片

二、寄存器(临时存储数据)

初步了解x86结构_第2张图片

x86-32 位所含有的寄存器有:
4 个数据寄存器 (EAX EBX ECX EDX)
2 个变址寄存器 (ESI EDI)
2 个指针寄存器 (ESP EBP)
6 个段寄存器 (ES CS SS DS FS GS)
1 个指令指针寄存器 (EIP)
1 个标志寄存器 (eflags)
9 个控制寄存器( CR0 - CR8
3 保护模式寄存器( GDTR LDTR IDTR

三、堆和栈(存储数据和指令)

1.栈
     1> 它是一种后进先出(LIFO)的数据结构。程序在运行时,会将栈用来存储函数的调用栈、内存的分配操作、表达式求值的临时变量以及与程序中的控制流相关的数据。

注:后进先出,即栈采用后进先出的存储方式,即最后进栈的元素,最先出栈。这是因为栈底部是固定的,每个元素只能从栈顶进入和离开栈。

       程序的栈是从进程地址空间的高地址向低地址增长的 ,入栈意味着数据进入更低的地址。

     2>栈是一种高效的内存结构,用于存放基础数据类型和引用类型的变量,大大简化内存的管理,提高了程序的执行效率。

     3>每当程序执行函数调用、变量声明或其他类型的操作时,都会在栈中添加一个栈帧(Stack Frame),也即是称为堆栈帧,用于存储函数的执行环境。

2.堆
     1>堆内存则是用于分配程序中动态数据结构的内存空间,它的生命周期不由程序的函数调用栈管理,因此堆空间通常会被程序员直接管理。

     2>堆空间则为程序提供了极为灵活的空间分配和管理手段,既可以手动管理,也可以交由垃圾回收机制自动管理,带来了很大的方便。

     3>亦称动态分配内存。程序在运行的时候用 malloc new 申请任意大小的内存,程序员自己负责在适当的时候用 free delete 释放内存。 动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则会发生内存泄漏现象。 与栈不同的是,堆是从低地址向高地址增长的
 

3.堆和栈的区别和联系
堆和栈是两个重要的内存区域,它们在内存管理和数据存储方面有着重要的区别和联系。

首先是区别:

 1>堆与栈的管理方式不同:栈是由系统自动分配和管理的,而堆需要程序员手动进行分配和管理。
 2>堆和栈的内存大小不同:栈的大小是固定(有限)的,由操作系统指定,而堆空间通常由系统分配初始大小,程序员可以自由地调整大小。
 3>堆和栈的数据存储方式不同:栈空间用于存储基本数据类型和引用类型的地址,堆空间则用于存储动态分配的对象和复杂数据结构。

其次是联系:

1>堆和栈都是内存区域,是程序中存储数据和指令的关键组成部分。
2>堆和栈都是用于存储变量和对象的内存空间。
3>程序在运行时,常会使用堆和栈的组合来实现内存分配和管理。

四、进程空间布局

进程的内存布局在结构上是有规律的,具体来说对于 linux 系统上的进程,其内存空间一般可以粗略地分 为以下几大段,从高内存到低内存排列:
1. 内核态内存空间,其大小一般比较固定(可以编译时调整), 32 位系统和 64 位系统的值不一样,用户不可使用。
2. 用户态的堆栈,大小不固定,可以用 ulimit -s 进行调整,默认一般为 8M ,从高地址向低地址增
长。
3. 数据段,主要是进程里初始化和未初始化的全局数据总和,当然还有编译器生成的一些辅助数据结构等,大小取决于具体进程,其位置紧贴着代码段。
4. 代码段,主要是进程的指令,包括用户代码和编译器生成的辅助代码,其大小取决于具体程序,但 起始位置根据 32 位还是 64 位一般固定 (-fPIC, -fPIE 等除外 )

初步了解x86结构_第3张图片

你可能感兴趣的:(linux)