mmap
的内存分配过程
-
虚拟内存的分配:当调用
mmap
分配匿名内存时,系统在进程的虚拟地址空间中为请求的内存区域创建一块地址空间。此时并不会立即为该区域分配物理内存,而是仅仅在虚拟地址空间中预留了空间。 -
页面分配:当进程第一次访问这个内存区域时(读、写等),会触发缺页异常(Page Fault)。操作系统在此时为该虚拟地址分配物理内存页,并将虚拟地址映射到物理内存。
-
内存保护:
mmap
调用允许指定内存区域的访问权限(prot
参数)。操作系统会根据设置的权限控制该内存区域的读写或执行权限。如果进程访问该内存时违反了权限设置,则操作系统会发出访问违规(segmentation fault)信号。 -
内存的释放:
mmap
分配的内存区域不会自动释放。当进程结束时,系统会自动回收该内存区域。如果需要提前释放该内存区域,可以调用munmap