小白的CTF学习之路5——内存的逻辑结构
很衰的一天,各种意料之外的问题,但都挡不住我每日一更的步伐
内存的逻辑结构大致分为以下几种:
数组
栈与队列
链表
二叉树
以上,数组,栈,链表是我这章要说明的
在学习前需要了解的两个问题:
1.内存的一次存入仅能放8bit大的空间,那么我们想要存入32bit的内存怎么办呢?
2.什么样的操作是更适合(更快)我们内存呢?
学习前需要明白的两个术语:
char=1byte
int=4byte
我们上一章说过,内存就好比一栋楼房,每一层存着相应的数据,但内存的物理条件仅能限制我们每一层存入1char的数据,那么我们要想在一层中存入1int的数据怎么办呢?下面介绍一个原始的方法:

这就是我们原始方法大致存储int数据的方法,可以注意看下面的四层被去掉了,这样每一层可存放1char,四个加起来正好可以存储Int数据,虽然表示是这么表示,但是楼层不是真的被去掉了,但是访问除会提示错误,这种方法固然可以存放大于1char的值,但是我们的操作速度会非常慢,具体怎么个慢法,请看下面这张图:

我们可以通过图片可知,程序每储存一个数都会进行一次寻址,将数据放到寻到的地址空间内,在我们读写数据过程中cpu是不断在运算的,这样一来就大大增加了我们储存数据的速度,那么如何才能加快读写的速度呢?
我在前几章说过,cpu在做累加时的运算速度是最快的
根据这一概念,工程师们引入了一个数组的概念:

既然累加是最快的运算,那么我们就将所需的空间打包起来,让最开始的地址作为此数组的地址,这样一来,我们存入的数据只需要找到此数组的地址,就可以直接对此数组空间进行读取操作,这样无疑大大缩短了我们的读写时间,但是,我们删除数据的话,层与层间的顺序就会断开,这样cpu又无法进行累加运算了,我们还需要将下面的层向上位移,所以说,数组虽然读写很快,但删除却很慢
在数组的基础上,工程师们又研究了一个便于数据记录的栈:

栈这个概念比较抽象,栈用来记录查询和回溯,列入:在10:05分储存数据5,10:05分储存数据8,10:30分储存10......
栈有一个原则——FILO(first in last out)既第一个进入的最后一个出来,听起来很绕?我们看下图,最先存入的5被放到了最下面,我们栈的存出规则是从下往上存的
除了栈之外,他们还将数组进行了变形:

这是一个队列,就好似我们排队一样,从下往上写入
这些结构都有一个问题,他们都是数组结构的,数组的删除是非常慢的,为了解决这一问题,我们引入链表这一概念:

我们可以看到,存入的层内多加了一层,里面存储着下一个要查的地址,这样,在我们cpu的运算当中,就可以快速的查找到下一个数据,删除的话也不会影响cpu的运算速度,链表这一概念完美的解决了数组删除过慢的弱点
未完待续......
小白的CTF学习之路5——内存的逻辑结构的更多相关文章
- 小白的CTF学习之路7——内存与硬盘
前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题 磁盘学习路线 虚拟缓存 虚拟内存 节约 ...
- 小白的CTF学习之路4——内存
明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...
- 小白的CTF学习之路2——二进制数据基础与运算(上)
今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间 在学习之前我们先了解几个问题: 32位是几个字节? 01011100对于十进制是多少? 00001111向 ...
- 小白的CTF学习之路8——节约内存的编程方式
今天第二更,废话不说上干货 上一章我们学习了内存和cpu间的互动方式,了解到内存的空间非常有限,所以这样就需要我们在编程的时候尽可能的节省内存空间,用最少的空间发挥最大的效果,以下是几种节约内存的方法 ...
- 小白的CTF学习之路1——程序与CPU
刚刚注册了这个博客园,尽量保持每日一更(*/ω\*) 今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记 首先我们学习程序与CPU之前需要 ...
- 小白的CTF学习之路6——阶段测评
刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的 C A: 运算器 B: 寄存器 C: 内存 D: 时钟 这是一道送分题,CPU包含以下几种原 ...
- 小白的CTF学习之路3——二进制数据基础与运算(下)
处理了二进制的整数运算,下面我们来进行令人绝望的浮点数运算 我们先来看一下float事列程序: #include<"stdio.sh"> int main() { fl ...
- 新手小白的Linux学习之路
大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...
- 小白的mapbox学习之路-显示地图
刚接触mapbox,只是简单记下自己的学习之路,如有错误,欢迎大神指正 1-头部引入链接 2-body中定义一个div块,用来显示地图 3-在script中创建一个map对象,并设置相关参数 mapb ...
随机推荐
- 3.Telnet探测端口后怎么退出
使用 'Ctrl' + ' ] ' 一起按退出
- 安装oracle [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突” 的问题
删除C:\Program Files (x86)\Oracle\Inventory\下的Oracle文件夹即可解决问题
- react 关闭eslint 配置
在 package.json 中修改为一下 "eslintConfig": { "extends": "react-app", " ...
- Spring 初学笔记
Spring 初学笔记: https://blog.csdn.net/weixin_35909255/article/category/7470388
- webpack打包优化
https://www.cnblogs.com/vvjiang/p/9327903.html
- @ControllerAdvice详解
@ControllerAdvice,是Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强.让我们先看看@ControllerAdvice的实现: package org.spri ...
- 音视频处理概要 markdown
最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...
- 利用百度编辑器和IIS限制文件上传的大小
1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /* 上传图片配置项 */ ...
- mybatis generator 源码学习
mybatis/generator 源码地址mybatis/parent 源码地址1. 分别点击Download ZIP下载到本地. 2. 解压generator-master.zip中的core到g ...
- win10操作系统上,wireshark抓取https。
今天试了下使用wireshark抓https的包 一.记录如下: 配置一个环境变量SSLKEYLOGFILE为D:\Temp\sslog.log(这个文件需要自己去创建). 去下载一个chrome浏览 ...