3、内存布局:应用程序是如何安排数据的你好,我是海纳。 在前边的课程里,我们学习了计算机物理地址和虚拟地址的概念。有了虚拟地址之后,运行在系统里的用户进程看到的地址空间范围,都是虚拟地址空间范围(32位计算机的地址范围是4G;64位计算机的地址范围是256T)。这样的话,就不用再担心内存...2026-03-01编程高手必学的内存知识
4、深入理解栈:从CPU和函数的视角看栈的管理你好,我是海纳。 上节课,我们讲到,栈被操作系统安排在进程的高地址处,它是向下增长的。但这只是对栈相关知识的“浅尝辄止”。那我们今天这节课,就会跟着前面的脉络,让你可以更深刻地理解栈的运行原理。 栈是每一个程序员都很熟悉的话题,但你敢说你真的完全了解...2026-03-01编程高手必学的内存知识
5、栈的魔法:从栈切换的角度理解进程和协程你好,我是海纳。 上一节课,我们了解到函数在执行的时候,就会在栈上创建栈帧,那么函数执行的上下文都将保存在栈帧里。今天,我们就再来进一步分析,栈切换在计算机系统设计中所发挥的重要作用。 几乎所有的程序员都会遇到并发程序。因为多进程或者多线程程序可以并...2026-03-01编程高手必学的内存知识
6、静态链接:变量与内存地址是如何映射的你好,我是海纳。 在第3节课里,我们看到进程的内存空间包含代码段、数据段、bss段、堆和栈等区域。在第4节和第5节课里,我们对栈的相关知识进行了深入学习。今天我们来看看内存中的另一个重要部分:代码段和数据段的组织方式。 我们知道,编程的代码无非是由函...2026-03-01编程高手必学的内存知识
7、动态链接(上):地址无关代码是如何生成的你好,我是海纳。 通过上节课的学习,我们了解到,链接器可以将不同的编译单元所生成的中间文件组合在一起,并且可以为各个编译单元中的变量和函数分配地址,然后将分配好的地址传给引用者。这个过程就是静态链接。 静态链接可以让开发者进行模块化的开发,大大的促进...2026-03-01编程高手必学的内存知识
8、动态链接(下):延迟绑定与动态链接器是什么你好,我是海纳。 在上节课里,我们学习了动态链接过程的基本原理。动态链接通过GOT表加一层间接跳转的方式,解决了代码中call指令对绝对地址的依赖,从而实现了PIC的能力。我们同时也讲到了GOT表中的地址是由加载器在加载时填充的。 不过,细心的你也发...2026-03-01编程高手必学的内存知识