
简介
该用户还未填写简介
擅长的技术栈
未填写擅长的技术栈
可提供的服务
暂无可提供的服务
第 9 天:malloc 申请的内存从哪来,free 之后又去了哪里?
因此,释放了一批对象后,进程的物理内存占用没有立即下降,并不能单独证明发生了泄漏。另一种情况是:空闲空间加起来不少,却被仍在使用的小块隔开,缺少足够大的连续空闲块。你越过一个数组的末尾,地址可能仍落在可写的那一页里,硬件没有足够的信息判断“这里已经超过了。例如,为了满足对齐和大小分类,申请的块可能比请求稍大,块内部多出来的部分无法由应用按申请之外的范围使用,这属于内部碎片。通常先找进程里的内存分配
第 8 天:访问的内存页不在 RAM 里,程序为什么还能继续运行?
昨天我们把一个虚拟地址拆成“页号”和“页内偏移”,再通过页表找到物理内存。直觉上可能会觉得程序要报错。但很多时候,这正是操作系统预期之中的事。
第 7 天:两个进程都在用 `0x1234`,为什么不会改到同一块内存?
昨天我们说,父子进程不能靠修改普通变量传话,因为它们各有自己的地址空间。“各有一份”究竟是什么意思?难道fork时,操作系统立刻把父进程用过的内存全部复制了一遍?先做个实验。
第 3 天:好几个程序都想运行,CPU 先给谁?
昨天的launcher创建了子进程,然后调用waitpid等它结束。等待期间,父进程没有事情可做。如果它一直占着 CPU,反复检查“结束了吗”,其他程序就白白少了一份运行机会。操作系统会让它暂时等待,把 CPU 交给别的任务。等子进程结束,父进程才重新获得运行资格。
第 1 天:敲下 `./hello` 后,程序是怎么跑起来的?
我们先不谈“操作系统有哪些功能”。今天只追一件事:在终端输入./hello,直到屏幕出现一行字,中间发生了什么?这个过程会碰到操作系统最重要的几个概念:进程、内存、系统调用和 CPU 调度。把它看明白,后面的文章才有地方落脚。本文的命令在 Linux 或 WSL 中运行。
到底了







