第三讲指针存储之迷 李林 电子科技大学计算机学院
第三讲 指针存储之谜 李 林 电子科技大学 计算机学院
个看似废话的问题 示例代码 。 int test; int *ptr &test; 问题 指针变量ptr中存储的是什么? 变量test的地址? 变量test的地址,再外加它的类型int? 似乎真的是地址?此地址非彼地址
一个看似废话的问题 ◼ 示例代码: ◼ int test; ◼ int *ptr = &test; ◼ 问题: ◼ 指针变量ptr中存储的是什么? ◼ 变量test的地址? ◼ 变量test的地址,再外加它的类型int? ◼ 似乎真的是地址?此地址非彼地址
回顾 “地址” 回顾《汇编语言》 。在汇编编程中,我们常常使用什么地址? 逻辑地址(段基址:偏移量) 物理地址=段基址(段寄存器×10H)+偏移 量 short jmp、near jmp、far jmp、r near call、 far call 回顾《操作系统》 虚拟地址经页表(多级)转换,变成物理地址 虚拟地址是什么?和逻辑地址有什么关系?
回顾“地址” ◼ 回顾《汇编语言》 ◼ 在汇编编程中,我们常常使用什么地址? ◼ 逻辑地址(段基址:偏移量) ◼ 物理地址 = 段基址(段寄存器×10H)+ 偏移 量 ◼ short jmp、near jmp、far jmp、near call、 far call ◼ 回顾《操作系统》 ◼ 虚拟地址经页表(多级)转换,变成物理地址 ◼ 虚拟地址是什么?和逻辑地址有什么关系?
回顾 “地址” 回顾《高级计算机系统结构》 x86的地址转换机制: 分段+分页 逻辑地址 分段 线性地址 分页 物理地址 虚拟地址包括了逻辑地址和线性地址 为什么会有分段机制? 为什么会有分页机制?
回顾“地址” ◼ 回顾《高级计算机系统结构》 ◼ x86的地址转换机制: ◼ 分段 + 分页 ◼ 虚拟地址包括了逻辑地址和线性地址 ◼ 为什么会有分段机制? ◼ 为什么会有分页机制? 逻辑地址 线性地址 分段 分页 物理地址
回顾“地址 逻辑地址 分段 线性地址 分页 物理地址 分页机制可以绕开,但分段机制绕不开 程序能直接使用的只能是逻辑地址 示例代码: int test; int *ptr &test; ptr存储的内容,与test的逻辑地址有关 段基址存放在寄存器中,ptr只能存放偏移量
回顾“地址” ◼ 分页机制可以绕开,但分段机制绕不开 ◼ 程序能直接使用的只能是逻辑地址 ◼ 示例代码: ◼ int test; ◼ int *ptr = &test; ◼ ptr存储的内容,与test的逻辑地址有关 ◼ 段基址存放在寄存器中,ptr只能存放偏移量 逻辑地址 线性地址 分段 分页 物理地址