虚拟内存

额外i知识点:windows指针:near 16位  far32  huge综合。是历史遗留问题,如何让16位机扩展到链接32位机内存。

虚拟内存:概念

一个内存不能访问另一个程序的地址指向的空间。

一个程序区访问其它程序的内存空间,会导致崩溃。所以,一般都将内存直接交给系统进行管理,由系统分配给不同的程序不同的进程,此时程序中提供的就是逻辑地址,与实际上的物理地址相关联,这个过程称之为内存映射。

虚拟地址与物理地址映射的时候,会分配一个至少一个内存页的空间。

 

虚拟内存管理:

栈内的数据由编译器进行管理。

堆内的数据由程序员进行管理,需要关心两个问题,一个是内存是否映射,映射是否得到管理。

Linux中有两个内存映射函数:brk/sbrk。

sbrk与malloc的区别:

使用sbrk分配空间,可以使用sbrk得到没有映射的虚拟地址。

使用brk分配空间,同时可以使用brk来释放空间。

 

sbrk(int)如果是第一次运行,sbrk实际上是管理的两个地址,首先返回一个未经映射空间的首地址,然后再将另外管理的一个地址+size,在下一次调用sbrk函数的时候,会得到所管理的另外一个地址。

程序运行顺序:首先返回地址,再分配空间,再+size。

posted @ 2017-04-07 08:57  冥地魔王  阅读(117)  评论(0)    收藏  举报