1.结论
2.背景
3.分配原理
4.具体情况
(1)malloc()小于128k的内存时,使用brk系统调用在堆上申请内存
(2)malloc()大于128k的内存时,使用mmap系统调用在栈与堆之间的映射区分配内存
1.结论:
1)当开辟的空间小于 128K 时,调用 brk()函数,malloc 的底层实现是系统调用函数 brk(),其主要移动指针 _enddata(此时的 _enddata 指的是 Linux 地址空间中堆段的末尾地址,不是数据段的末尾地址)
2)当开辟的空间大于 128K 时,mmap()系统调用函数来在虚拟地址空间中(堆和栈中间,称为“文件映射区域”的地方)找一块空间来开辟。
2.背景:
当一个进程发生缺页中断的时候,进程会陷入核心态,执行以下操作:
1)检查要访问的虚拟地址是否合法
2)查找/分配一个物理页
3)填充物理页内容(读取磁盘,或者直接置0,或者什么都不做)
4)建立映射关系(虚拟地址到物理地址的映射关系)
5)重复执行发生缺页中断的那条指令
如果第3布,需要读取磁盘,那么这次缺页就是 majfit(major fault:大错误),否则就是 minflt(minor faultÿ