
计算机基础
文章平均质量分 88
嵌入式与Linux那些事
这个作者很懒,什么都没留下…
展开
-
关于 uintptr_t和intptr_t 类型
最近在看代码时,发现了两个之前没见过的数据类型:,。这两个数据类型是ISO C99定义的,具体代码在linux平台的头文件中。为什么会根据不同的位数定义不同的长度呢?先看下不同的数据类型在不同字长机器上长度大小。指针在32位平台和64位平台下均与 类型的长度一致,然而在16位机器上,为4个字节,而指针为2个字节。因此,就可以发现和定义的巧妙之处:在64位机器上,为,为。而在非64位机器上,为int,为。这样就可以保证和的长度与机器的指针长度一致,因此在进行整数与 指针的相互转换时可以用进行过渡。下面写两个原创 2022-07-03 22:50:51 · 3432 阅读 · 1 评论 -
【图文】函数调用过程中栈的变化
大家都知道函数调用是通过栈来实现的,而且知道在栈中存放着该函数的局部变量。但是对于栈的实现细节可能不一定清楚。本文将介绍一下在Linux平台下函数栈是如何实现的。栈帧的结构函数在调用的时候都是在栈空间上开辟一段空间以供函数使用,所以,我们先来了解一下通用栈帧的结构。如图所示,栈是由高地址向地地址的方向生长的,而且栈有其栈顶和栈底,入栈出栈的地方就叫做栈顶。在x86系统的CPU中,rsp是栈指针寄存器,这个寄存器中存储着栈顶的地址。 rbp中存储着栈底的地址。 函数栈空间主要是由这两个寄存器来确定的原创 2021-12-30 07:56:02 · 2183 阅读 · 0 评论 -
【硬核】MMU是如何完成地址翻译的
文章目录1. 什么是虚拟内存?2. 虚拟内存的作用3. 虚拟内存与物理内存3.1 CPU存取数据3.2 物理地址常用术语3.3 虚拟地址常用术语3.4 页表常用术语3.5 页命中/缺页4. 为什么有了高速缓存,还需要TLB呢?5. MMU是如何完成地址翻译的?5.1 准备工作5.1.1 内存系统的基本条件5.1.2 TLB5.1.3 页表5.2 产生虚拟地址5.3 构造物理地址5.4 遍历高速缓存5.5 缺页处理6. 总结虚拟内存是现代操作系统中最伟大的发明之一。它为每个进程提供了一个一致的、私有的地址原创 2021-08-03 22:18:35 · 2628 阅读 · 7 评论 -
扒一扒ELF文件
ELF文件(Executable Linkable Format)是一种文件存储格式。Linux下的目标文件和可执行文件都按照该格式进行存储,有必要做个总结。文章目录1. 链接举例2. ELF文件类型2.1 可重定位目标文件(.o文件)2.2 可执行目标文件(a.out文件)2.3 共享对象文件(.so文件)3. ELF文件作用4. ELF文件格式4.1 从编译和链接角度看ELF文件(可重定位目标文件)4.2 从程序执行角度看ELF文件(可执行文件)5.总结1. 链接举例 在介绍ELF文件之前,.原创 2021-01-30 22:46:47 · 2141 阅读 · 0 评论 -
9个提高代码运行效率的小技巧你知道几个?
我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素。通常,我们必须在程序的简洁性与它的运行速度之间做出权衡。今天我们就来聊一聊如何优化程序的性能。原创 2021-01-10 17:28:38 · 3848 阅读 · 3 评论 -
多图详解缓冲区溢出问题
蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的病毒。缓冲区溢出一个常见的后果是:黑客利用函数调用过程中程序的返回地址,将存放这块地址的指针精准指向计算机中存放攻击代码的位置,造成程序异常中止。为了防止发生严重的后果,计算机会采用栈随机化,利用金丝雀值检查破坏栈,限制代码可执行区域等方法来尽量避免被攻击。虽然,现代计算机已经可以“智能”查错了,但是我们还是要养成良好的编程习惯,尽量避免写出有漏洞的代码,以节省宝贵的时间!原创 2020-11-18 23:43:21 · 19031 阅读 · 27 评论 -
24张图7000字详解计算机中的高速缓存
什么是缓存 缓存又叫高速缓存,是计算机存储器中的一种,本质上和硬盘是一样的,都是用来存储数据和指令的。它们最大的区别在于读取速度的不同。程序一般是放在内存中的,当CPU执行程序的时候,执行完一条指令需要从内存中读取下一条指令,读取内存中的指令要花费100000个时钟周期(缓存读取速度为200个时钟周期,相差500倍),如果每次都从内存中取指令,CPU运行时将花费大量的时间在读取指令上。这显然是一种资源浪费。 如何解决这个问题呢?有人肯定会问,直接把程序存储在缓存中不行吗? 答案是可以的。但是原创 2020-12-30 22:32:52 · 4787 阅读 · 14 评论