虚拟内存
额外i知识点:windows指针:near 16位 far32 huge综合。是历史遗留问题,如何让16位机扩展到链接32位机内存。
虚拟内存:概念
一个内存不能访问另一个程序的地址指向的空间。
一个程序区访问其它程序的内存空间,会导致崩溃。所以,一般都将内存直接交给系统进行管理,由系统分配给不同的程序不同的进程,此时程序中提供的就是逻辑地址,与实际上的物理地址相关联,这个过程称之为内存映射。
虚拟地址与物理地址映射的时候,会分配一个至少一个内存页的空间。
虚拟内存管理:
栈内的数据由编译器进行管理。
堆内的数据由程序员进行管理,需要关心两个问题,一个是内存是否映射,映射是否得到管理。
Linux中有两个内存映射函数:brk/sbrk。
sbrk与malloc的区别:
使用sbrk分配空间,可以使用sbrk得到没有映射的虚拟地址。
使用brk分配空间,同时可以使用brk来释放空间。
sbrk(int)如果是第一次运行,sbrk实际上是管理的两个地址,首先返回一个未经映射空间的首地址,然后再将另外管理的一个地址+size,在下一次调用sbrk函数的时候,会得到所管理的另外一个地址。
程序运行顺序:首先返回地址,再分配空间,再+size。

浙公网安备 33010602011771号