内存映射
自动映射
-
当程序执行时,操作系统会把它加载到内存形成进程后,会自动地给text、data、bss、stack、命令行参数、环境变量表进行自动映射
手动映射
-
在程序首次使用malloc申请内存时,此时malloc手中没有堆内存可以分配,也就是说没有任何映射过的内存可以供分配使用,malloc会找系统申请映射33页虚拟内存,这33页映射后交由malloc管理分配,之后再找malloc申请内存时,malloc会从这33页中直接分配给调用者,如果33页分配完,继续重复以上操作,这个过程malloc底层调用了操作系统的API接口函数完成映射的操作
-
如果程序需要的堆内存并不多,距离33页差距很大,那么直接使用malloc是方便,但是也造成了很大的内存映射浪费,所以通过学习直接调用系统的API接口函数,来更精确地映射内存
-
关于malloc获取虚拟内存空间的实现过程,与内核版本有关,大体逻辑:
-
如果分配的内存小于128Kb,底层调用sbrk\brk
-
如果分配的内存大于128Kb,底层调用mmap\munmap
-
以上只是简单情况,具体实际可能会更复杂
-