码迷,mamicode.com
首页 > 其他好文 > 详细

计算机操作系统 - 内存管理/逻辑地址

时间:2020-11-01 10:15:01      阅读:16      评论:0      收藏:0      [点我收藏+]

标签:linu   linux   turn   根据   链接   用户   std   libc   global   

计算机操作系统 - 内存管理/逻辑地址

〇、定义

逻辑地址:指程序使用的地址,该地址处于用户地址空间。
物理地址:指机器内存的地址,地址处于主存储器地址空间,对应主存储器存储单元。

一、实例

以一个C语言程序的编译运行为例。

环境
gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1)
Target: arm-linux-gnueabihf

#include <stdio.h>

int global_value_a = 0x10;
int global_value_b = 0x10;

int main()
{
  printf ("&global_value_a=%p,main=%p\n", 
    &global_value_a,main);
  return 0;
}

编译
gcc test.c -c -o test.o
gcc test.o -o a.out

> ./a.out
&global_value=0x21028,main=0x10408
> nm test.o
00000000 D global_value_a
00000004 D global_value_b
00000000 T main
         U printf
> nm a.out
...省略部分...
00021028 D global_value_a
0002102c D global_value_b
         w __gmon_start__
000102c8 T _init
00020f14 t __init_array_end
00020f10 t __init_array_start
000104a4 R _IO_stdin_used
00010498 T __libc_csu_fini
00010438 T __libc_csu_init
         U __libc_start_main@@GLIBC_2.4
00010408 T main
...省略部分...

结论

  • 编译阶段生成的模块使用相对模块起始位置的逻辑地址。
  • 链接阶段将各个模块(例子中只有一个)进行逻辑地址重定位(把各个模块“安排”到逻辑地址空间的不同位置上)。
  • 运行阶段(也可以是装入阶段)执行逻辑地址到物理地址的转换(程序中的逻辑地址仍为逻辑地址,只是在访存时根据逻辑地址进行了转换)。

计算机操作系统 - 内存管理/逻辑地址

标签:linu   linux   turn   根据   链接   用户   std   libc   global   

原文地址:https://www.cnblogs.com/amazing-1/p/13906838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!