这几天在看C语言的书籍,对C的内存映像有点疑惑,于是,查找资料,查阅了庞丽萍编著的《操作系统原理》第四版中的第七章主存管理中的段式系统,此外还看了王元珍、曹忠生、韩忠芬编著的《80X86汇编语言程序设计》得到了一个自己对在80X86结构下的内存映射的理解。不过也许自己的理解是错的或者有不到之处,希望大神能够指出理解的不足之处。
首先,一个C程序,在内存中的映射(当然这里指的是80X86系统)包括四个区域(这里是在看C语言大全的时候介绍的):
第一个区域是程序代码区域:存放的是程序代码。
第二个区域是全局变量区域:存放的是全局变量和静态变量等伴随着整个程序生存过程的数据。
第三个区域是栈(stack):用来保存函数调用时返回地址、函数变元、局部变量、CPU当前状态等临时的数据。
第四个区域是堆(heap):用来提供给程序员动态分配和释放的区域,比如使用malloc申请一段内存,就是在这个区域中申请的。
然后联系《80x86汇编语言程序设计》中介绍的Intel80X86微处理器结构中寄存器的知识,知道在处理器中的六大部件中,寄存器分为以下几个:
执行部件中的寄存器:
EAX:累加寄存器
EBX:基址寄存器