马士兵JVM 精讲笔记(一)
本文和后文中讲的都是32位机,也就是i386的系统
计算机语言(机器语言)可以通过0和1生成机器指令,将指令输入到cpu 来执行,通过机器指令计算机可以实现各种各样的功能,而机器语言又分为操作码和操作数,假如:
int a = 1;
生成的机器码为(下面是随便输的):
101010(操作码) 10101010101011011111(操作数)
其中就包含了操作码和操作数,在内存当中每一个基础执行单元为8位,1byte(字节)等于8bit(位),而int a 是四字节,所以在内存当中开辟空间的时候会在内存中开辟4byte的空间,而在开辟内存的过程中,必须指定内存的地址,此时就引出的高地址和低地址的概念。
高地址和低地址
可以简单的认为,可以把主存看成一本空白的作业本,内存地址就相当于主存的页码,你现在要在笔记本上记录一些内容,他的页码排序是
第一页 : 0x0000001
第二页 : 0x0000002
...
最后一页: 0x0000092
1 如果你选择`从前向后记录`(用完第一页,用第二页,类推)这就是先使用低地址,后使用高地址.
0x0000001 -> 0x0000002-> ... -> 0x0000092
业内有这样表述:动态分配内存时堆空间向高地址增长,说的就是这种情况.
这个向高地址增长就是先使用低地址,后使用高地址的意思.
2 如果你选择`从后往前记录`(先用笔记本的最后一页,用完后使用倒数第二页,类推) 这就是先使用高地址,后使用低地址
0x0000092 -> ... ->0x0000002 -> 0x0000001
业内表述:`0xbfac 5000-0xbfad a000`是栈空间,其中高地址的部分保存着进程的环境变量和命令行参数,低地址的部分保存函数栈帧,**栈空间是向低地址增长的**.
这个向低地址增长就是先使用高地址,后使用低地址的意思.
栈底(栈基址)和栈顶
通过上面的高地址和低地址我们明白,在内存中是以类似于数组的方式存储数据,而0x0000092之类的数值代表了数据在内存中的位置,也就是我们的内存地址(类似于下标),我们如果要找到指定的数据,就必须在CPU当中存储栈底和栈顶的地址,这时就牵扯到了CPU的寄存器
SP寄存器(stack pointer) 和BP寄存器(base pointer)
SP寄存器存储了栈顶的地址,而BP寄存器则存储了栈底的地址,初始状态下内存中不存在数据,栈顶和栈底指向了同一个位置(就像数组第一个下标是0,最后一个下标也是零,第一个下标相当于栈顶,最后一个下标相当于栈底),当我们需要在内存中开辟一个空间的时候,通过sp寄存器的位置减去要开辟的内存空间,如果写成汇编代码则可以如下表示:
例如:上面的int a 为四字节,所以要在内存中开辟四字节的空间,所以SP 寄存器的减去4个字节,则相当于在内存中开辟了4字节的内存空间
sub 4,sp
sub在英文中代表了减,我们就可以看出在内存中减去了四个字节,而在内存中存放数据的时候是存在指定的顺序的,这里就引出了一个关键知识点:字节序。
字节序
字节序分为大端序和小端序,我们的内存也存在高低之分,越往右是低,越往左是高,低位置叫做小端序,高位置叫做大端序,而大端序和小端序则是代表了内存的两种排序规则。
大端序(英:big-endian)或称大尾序。,数据以8bit为单位:
地址增长方向 →
0x0A | 0x0B | 0x0C | 0x0D |
小端序(英:little-endian)或称小尾序。数据以8bit为单位:
0x0D | 0x0C | 0x0B | 0x0A |
Inter 64 位和AI 32 位的处理器使用的都是小端序
Inter 寄存器的变迁
在1978年Inter 处理器为16位,SP 寄存器和BP寄存器的名称并没有变化,在之后处理变为了32位后,SP寄存器和BP寄存器则被称为ESP 寄存器和EBP寄存器,也就是扩展的SP和BP寄存器,而64位将E改为了R叫做RBP和RSP寄存器。
高八位和低八位
以EBP寄存器为例:一个EBP由两个BP组成,而我们的数据越往右越低,所以EBP寄存器中往左的16位为高16位,往右的16位为低16为。AX 寄存器为通用寄存器,为16位寄存器,变成32位,被称为EAX,变成64位被称为RAX,一个16位可以表示成两个八位,往左的8位为高八位,往右的8位为高八位,将AX中的X替换为H 和 L,AH代表高八位,AL代表低八位,X 在这里代表了未知数。
再来看汇编
因为本文研究的是32位机,所以寄存器的名称为ESP和EBP,那此时int a = 1;我们在内存中开辟一块空间,使用汇编语言可以这样写:
sub 4,esp
mov 1,-4(ebp)
mov 1,-4(ebp)表示将数值1 移动到-4的ebp位置。
马士兵JVM 精讲笔记(一)相关推荐
- 马士兵JVM课程笔记
马士兵JVM课程笔记 GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? ...
- Java高并发编程 (马士兵老师视频)笔记(一)同步器
本篇主要总结同步器的相关例子:包括synchronized.volatile.原子变量类(AtomicXxx).CountDownLatch.ReentrantLock和ThreadLocal.还涉及 ...
- 信安精品课:第5章物理与环境安全技术精讲笔记
第5章物理与环境安全技术精讲笔记 一.本章知识框架 二.本章大纲要求 三.本章重要易考知识点清单 5.1 物理安全概念与要求 物理安全是网络安全的基础. 传统上的物理安全也称为实体安全,是指包括环境. ...
- 信安精品课:第4章网络安全体系与网络安全模型精讲笔记
第4章网络安全体系与网络安全模型精讲笔记 一.本章知识框架 二.本章大纲要求 4.1 网络安全体系概述 •网络安全体系概念 •网络安全体系特征 •网络安全体系用途 4.2 网络安全体系相关安全模型 • ...
- 信安精品课:第3章密码学基本理论精讲笔记
第3章 密码学基本理论精讲笔记 一.本章知识框架 二.本章大纲要求 3.1 密码学概况 ●密码学发展简况●密码学基本概念●密码安全性分析 3.2 密码体制分类 ●私钥密码体制●公钥密码体制●混合密码体 ...
- 信安精品课:第2章网络攻击原理与常用方法精讲笔记
第2章网络攻击原理与常用方法精讲笔记 https://www.moondream.cn/?p=2098 一.本章知识框架 2.1 网络攻击概述 22 2.1.1 网络攻击概念 22 2.1.2 网络攻 ...
- 信安精品课:第1章网络信息安全概述精讲笔记
第1章网络信息安全概述精讲笔记 https://www.moondream.cn/?p=2095 一.本章知识框架 二.本章大纲要求 1.网络信息安全概述 1.1 网络信息安全基本属性 ● 机密性 ● ...
- 马士兵hibernate(原始笔记)
马士兵hibernate(原始笔记) 课程内容 1 HelloWorld a) Xml b) annotation 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R ...
- 马士兵坦克大战学习笔记(一)
java初学者对于马士兵坦克大战的个人学习笔记及代码问题总结(第一阶段), 1.系统自动初始化了Graphics g参数 2.设计原则:高内聚,低耦合: 一个模块中的各元素之间的紧密程度越高,内聚性越 ...
最新文章
- PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
- hdu1529 差分约束(好题)
- 【原创】如何优化一个网站使之提高访问速度--更新20120216
- DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie
- HTTP返回代码代表的含义(403,404,500,502,504)
- 拜山贴(COM+中的连接复用)
- JAVA线程池shutdown和shutdownNow的区别
- 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=属性,不能使用selected...
- c语言 16 16 字库,16位汉字显示屏的字库软件(点阵字库)
- SASS教程sass超详细教程
- 猿创征文 |【算法入门必刷】数据结构-栈(四)
- mt950报文解析_系列之五 | MT759报文升级内容解析
- PySpark 累加器使用及自定义累加器
- Linux TC 带宽管理队列规则
- 存储术语中的LUN概念
- signature=79628ed6ceb6a7f7dd3c2bec70171b45,Hvad kortene kan fortælle om kultur- og naturlandskabet
- 2d游戏循环滚动地图中的拼接缝隙问题
- springboot之Actuator
- 单链表的创建--从零开始
- Xmrig挖矿木马之暴力分析!
热门文章
- CA证书的签发流程详情
- win10降win7_软硬兼施Win7:8核笔记本/移动工作站出坑记
- 机器人学习笔记(一)
- pytorch下Numpy,Torch,Spicy,NetworkX及其他基本数据类型相关操作(持续更新)
- Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍
- PNP三极管电路简单分析
- 手机录屏视频用ffmpeg进行视频截取以及旋转
- IDM trust Keycloak
- Snapchat发布不到2个月的故事搜索功能,又双叒被Instagram抄袭了
- tiny core linux网络连接,用Tiny Core Linux打造纯Firefox上网系统(概要)