malloc如何从堆中获取内存?

问题描述

我们知道<b-select v-model="project" class="form-control"> <option value="Please choose..." disabled>Please choose...</option> <option :key="project.ProjectID" v-for="project in projects" :value="project"> {{project.ProjectName }}</option> </b-select> 在内部调用malloc。但是mmap不一定会映射到堆,因为mmap可以将对象映射到虚拟内存中的任何区域,那么mmap在内部如何确保所请求的内存大小为从堆?

解决方法

malloc使用mmap分配内存时,它不在乎内存来自何处,而是将分配委托给mmap,并依靠它来提供可用的块的内存。

在GNU C库(可能还有其他实现中)中,此类分配与使用sbrk管理的分配分开跟踪。所有涉及mmap分配的操作也都被委托(重新分配和释放)。

从内核的角度来看,此类分配是临时中断的,即程序中断后的。从程序员的角度来看,他们都是一样的。与仅使用sbrk的分配相比,主要的实际后果是您不能假定已分配的块在程序中断之内,或者不能访问两个已分配块之间的地址空间,但是无论如何都不应这样做

另请参阅the POSIX specification for malloc-它没有说明堆内容。