Linux内存管理
e<unistd.h>
int bss_var; int data_var0=1; int main(int argc,char **argv) { printf("below are addresses of types of process''s memn"); printf("Text location:n"); printf("tAddress of main(Code Segment):%pn",main); printf("____________________________n"); int stack_var0=2; printf("Stack Location:n"); printf("tInitial end of stack:%pn",&stack_var0); int stack_var1=3; printf("tnew end of stack:%pn",&stack_var1); printf("____________________________n"); printf("Data Location:n"); printf("tAddress of data_var(Data Segment):%pn",&data_var0); static int data_var1=4; printf("tNew end of data_var(Data Segment):%pn",&data_var1); printf("____________________________n"); printf("BSS Location:n"); printf("tAddress of bss_var:%pn",&bss_var); printf("____________________________n"); char *b = sbrk((ptrdiff_t)0); printf("Heap Location:n"); printf("tInitial end of heap:%pn",b); brk(b 4); b=sbrk((ptrdiff_t)0); printf("tNew end of heap:%pn",b); return 0; }
它的结果如下 below are addresses of types of process''s mem Text location: Address of main(Code Segment):0x8048388 ____________________________ Stack Location: Initial end of stack:0xbffffab4 new end of stack:0xbffffab0 ____________________________ Data Location: Address of data_var(Data Segment):0x8049758 New end of data_var(Data Segment):0x804975c ____________________________ BSS Location: Address of bss_var:0x8049864 ____________________________ Heap Location: Initial end of heap:0x8049868 New end of heap:0x804986c 利用size命令也可以看到程序的各段大小,比如执行size example会得到 text data bss dec hex filename 1654 280 8 1942 796 example 但这些数据是程序编译的静态统计,而上面显示的是进程运行时的动态值,但两者是对应的. 通过前面的例子,我们对进程使用的逻辑内存分布已先睹为快.这部分我们就继续进入操作系统内核看看,进程对内存具体是如何进行分配和管理的. 从用户向内核看,所使用的内存表象形式会依次经历“逻辑地址”——“线性地址”——“物理地址”几种形式(关于几种地址的解释在前面已经讲述了).逻辑地址经段机制转化成线性地址;线性地址又经过页机制转化为物理地址.(但是我们要知道Linux系统虽然保留了段机制,但是将所有程序的段地址都定死为0-4G,虽然逻辑地址和线性地址是两种不同的地址空间,但在Linux中逻辑地址就等于线性地址,它们的值是一样的).沿着这条线索,我们所研究的主要问题也就集中在下面几个问题. 1. 进程空间地址如何管理? 2. 进程地址如何映射到物理内存? 3. 物理内存如何被管理? 以及由上述问题引发的一些子问题.如系统虚拟地址分布;内存分配接口;连续内存分配与非连续内存分配等. 进程内存空间 Linux操作系统采用虚拟内存管理技术,每个进程都有各自互不干涉的进程地址空间.该空间是块大小为4G的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址.利用这种虚拟地址不但能起到保护操作系统的效果(用户不 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |