上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 132 下一页
摘要: 目录P593 P593 讲一下图9-36的未使用的起始位置为什么是用来对齐的:注意这里是整个堆的起点,然后图中的虚线之间就表示一个字节,有效载荷的起始位置必须是双字;如果没有这个未使用的起始位置,那么图中每一个块整体向前移动,第一个已分配块(也就是头部是16/1的块)的有效载荷显然就没有对齐了 阅读全文
posted @ 2025-08-28 22:13 最爱丁珰 阅读(10) 评论(0) 推荐(0)
摘要: 目录P603 P603 下面可以看一下什么叫做“隐式空闲链表与堆块总数成正比,显式空闲链表与空闲块总数成正比” 另外讲一下分配空闲块之后的维护 然后讲几种释放空闲块之后的维护 上图中,释放的块与其之前的块都是空闲块,我们不会让两个空闲块连续在一起,所以进行了合并;合并的时候就要注意维护链表 上图中就 阅读全文
posted @ 2025-08-28 22:11 最爱丁珰 阅读(15) 评论(0) 推荐(0)
摘要: 目录P598P600P602 P598 下面解释一下图9-41中的一些东西 Points to last byte of heap plus 1的意思是堆的最后一个字节的下一个字节的起始位置 mem_init里面的Malloc与malloc是有区别的,前者只是提供一大块区域作为可用堆空间的模拟,而后 阅读全文
posted @ 2025-08-26 22:52 最爱丁珰 阅读(7) 评论(0) 推荐(0)
摘要: 在使用malloc函数的时候分配的是堆区的空间,但是堆区是虚拟内存啊。怎么知道在物理内存中一定有足够的空间分配呢? 这是一个非常好的问题,它触及了操作系统内存管理的核心。你的理解是正确的,malloc 分配的是虚拟内存,而程序在运行时使用的是虚拟地址空间。 简单直接的答案是:程序(以及malloc) 阅读全文
posted @ 2025-08-26 22:10 最爱丁珰 阅读(28) 评论(0) 推荐(0)
摘要: 下面是一个例子 阅读全文
posted @ 2025-08-26 14:37 最爱丁珰 阅读(5) 评论(0) 推荐(0)
摘要: 目录P580为什么内核要这样做?(“便利的方法来访问”)P581 P580 “Linux 也将一组连续的虚拟页面(大小等于系统中 DRAM 的总量)映射到相应的一组连续的物理页面” 这句话的意思是,Linux 内核在其虚拟地址空间中,预留了一大段连续的虚拟内存地址。这段虚拟地址空间的大小正好等于你电 阅读全文
posted @ 2025-08-26 14:35 最爱丁珰 阅读(7) 评论(0) 推荐(0)
摘要: 目录P579 P579 这里图9-25里面说的“每个条目...区域”的意思指的是这个条目实际管理的虚拟内存空间的大小。比如L1页表管理整个虚拟地址,虚拟地址总大小为\(2^{48}\)字节,由于VPN 1一共有9位,所以L1页表有\(2^9\)页,于是每一页管理的虚拟地址为\(\frac{2^{48 阅读全文
posted @ 2025-08-25 23:57 最爱丁珰 阅读(10) 评论(0) 推荐(0)
摘要: 为什么要有L2,而不是取消L2然后将L1的大小翻倍:此时仍然可能出现指令/数据工作集大于指令/数据缓存的情况;另外我们不能确保指令缓存大于数据缓存(虽然大部分情况如此)。涉及L2就可以减轻上面两种情况。 当然还有另外一个原因,实际上L1 d-cache索引位不能太大,因为物理地址的索引位加偏移位(C 阅读全文
posted @ 2025-08-25 23:36 最爱丁珰 阅读(11) 评论(0) 推荐(0)
摘要: 目录P568 P568 解释一下为什么VPO和PPO在地址的低p位上:注意无论是虚拟页还是物理页,页的序号都是按照顺序编号的(也就是说序号相邻的页是挨在一起的);一个页的大小是\(2^p\)字节,所以地址应该每增加\(2^p\),所在页的序号就加一 阅读全文
posted @ 2025-08-22 22:34 最爱丁珰 阅读(6) 评论(0) 推荐(0)
摘要: 目录P563 P563 图9-4展示的页表与虚拟内存是一样大的,但是我们知道虚拟内存总大小很大,虚拟内存不是现实存在的,但是页表是实际存储在物理内存上的,这是怎么回事?实际上,现实中的页表是多级页表,所以一个页表的大小远小于虚拟内存大小 阅读全文
posted @ 2025-08-22 21:18 最爱丁珰 阅读(7) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 132 下一页