摘要:
在C语言中我们会使用malloc来动态地分配内存,这样做的一个主要理由是有些数据结构的大小只有在运行时才能确定。例如,如果你正在编写一个程序,需要用户输入一些数据,但你不知道用户会输入多少数据,那么你就需要使用动态内存分配。而堆是一种用于动态内存分配的数据结构,当程序员使用 malloc 或其他动态 阅读全文
摘要:
这篇写一下计算机系统中的缓存Cache应用场景和实现方式介绍。 Memory hierarchy 在讲缓存之前,首先要了解计算机中的内存结构层次Memory hierarchy。也就是下图金字塔形状的结构。 从上到下,内存层次结构如下: 寄存器:这是计算机中最快速的存储区域。它们位于处理器内,用于存 阅读全文
摘要:
缓冲区溢出是指当数据写入某个缓冲区(buffer)时,超出了为该缓冲区分配的内存空间,从而导致覆盖了相邻内存区域的情况。这种现象可能导致程序崩溃、数据损坏,甚至引发安全漏洞,允许攻击者利用这一漏洞执行恶意代码。 typedef struct { int a[2]; double d; } struc 阅读全文
摘要:
栈其实就是计算机系统内存中的一小块。栈是一块特殊的内存区域,栈在内存中的增长方向是向低地址扩展,%rsp寄存器存储栈的最低地址,即栈顶元素的地址。这种栈结构在程序中的应用有助于实现函数调用、局部变量的管理以及递归等功能。 Push和Pop指令 内存中中的栈可以进行push和pop指令,如果你学过数据 阅读全文
摘要:
上篇写了machine code基本知识概念,这篇再总结一下其中的流控制、条件判断,循环等实现。 一段machine code引出 在machine code中,通场使用jmp指令来跳转到某个代码块。比如一个机器码可能长这样: decision: subq $8, %rsp testl %edi, 阅读全文
摘要:
这篇文章写一下X86系统中的ISA(instruction set architecture)指令集架构,machine code以及汇编代码assembly code相关的内容。 一个简单的overview: 不用一下子全看得懂,先有个大致的概念,因为后面还会细讲其中一些部分。 总的来说,程序执行 阅读全文
摘要:
shell是Linux系统中的一个程序,用于接收键盘的命令,可以算作是用户和操作系统之间的接口CLI。 Directories目录 pwd:Print Working Directory 的缩写,这个命令将显示你当前所在的目录。 cd: Change Directory 的缩写,这个命令让你可以切换 阅读全文
摘要:
这篇文章梳理一下Bits, Bytes and Integers——二进制unsigned以及Two-complement表示,十六进制这些事儿。 计算机中所有数据都是用二进制的0和1组成的,直接上知识点。 二进制 Unsigned以及Two-complement 同样的一串二进制数,按照有符号或者 阅读全文
摘要:
这篇文章是继Git概念介绍,常用命令与工作流程整理 配图_TranSad的博客-CSDN博客 之后的一些补充,学习总结一些额外Git操作中的比较常用的操作。所以这篇文章假设你已经有了前面的基础,我就直接说一些没有提到过的部分。 Detached HEAD 在Git中我们通常把HEAD当成是指向当前分 阅读全文
摘要:
什么是Test Doubles In software testing, we developed unit tests and integration tests to test the code's functionality. However, in the real world, it is 阅读全文