这种问题以前没有遇见过,折腾了近一天,好歹弄明白了,这个源程序才精妙:/*ID: qq104801LANG: C++TASK: holstein*/#include #include #include #include #include using namespace std;#define VMA...
分类:
其他好文 时间:
2014-09-03 16:21:26
阅读次数:
491
关于LMA和VMA,这个问题,有点点小复杂,不过,此处,我会把我的理解,尽量通过通俗的方式解释出来,以方便理解。当然,鄙人水平有限,难免有错,希望各位批评指正。
一般提及LMA和VMA,多数情况都是和ld,链接器相关的。在了解这两个名词的详细含义之前,有些基本知识和前提要说一下:
[基础知识]
1。从你写的源代码到执行你的程序,一般经历了这几个过程:源代码编辑 -> 编译 ->...
分类:
其他好文 时间:
2014-07-05 23:39:47
阅读次数:
179
链接脚本中的LMA和VMA是什么意思,这个问题纠结了一段时间,今天在看《ARM体系结构与编程》时,豁然开朗,写下自己的认识,分享如下:
LMA:加载地址 位于存储器中的地址 LOAD MEMORY ADDRESS
VMA:运行地址(虚拟地址) 运行时的地址 VIRTUAL MEMORY ADDRESS 为什么用VMA表示呐?因为cpu运行的地址都是虚拟地址,经过MMU转为物理地址。在没有开MMU的裸板下,延续了这一称呼。理解为运行地址。
为什么要分 两种地址?
运行映像文件时,有些域可以移动到新...
分类:
其他好文 时间:
2014-06-30 06:13:11
阅读次数:
204
【虚拟内存管理】
每个进程对应一个task结构,它指向一个mm结构,这就是该进程的内存管理器。mm->pdg指向容纳页表的内存,每个进程都有自己的mm,每个mm都有自己的页表。用户程序对内存的操作(分配、回收、映射等)都是对mm的操作,具体来说是对mm上的vma(虚拟内存空间)的操作。这些vma代表这进程的各个区域,比如堆、栈、代码区、数据区、各种映射区等等。用户程序对内存的操作并不会直接影响页...
分类:
系统相关 时间:
2014-06-08 18:30:12
阅读次数:
420
Memory management1.listvmastatic void
mtest_dump_vma_list(void){ struct task_struct *task = current; //get the
task_struct of the current process stru...
分类:
系统相关 时间:
2014-05-15 22:29:30
阅读次数:
555