首页 > 系统相关 >虚拟内存跟物理内存之间的映射mmap\munmap

虚拟内存跟物理内存之间的映射mmap\munmap

时间:2023-02-08 21:33:19浏览次数:38  
标签:__ MAP 映射 mmap PROT 内存 munmap 虚拟内存

#include <stdio.h>
#include <sys/mman.h>

int main(void) {
    /*
     * 创建虚拟内存的映射
     * void *mmap (void *__addr, size_t __len, int __prot,int __flags, int __fd, __off_t __offset)
     * __addr 需要映射的起始位置,如果传NULL则操作系统自动计算
     * __len 需要映射的字节数,自动按页圆整(不足一页按一页映射,不足两页超过一页按两页映射,页的大小跟据操作系统的不同而不同)
     * __prot 映射区域的权限
     *      PROT_READ  可读
     *      PROT_WRITE 可写
     *      PROT_EXEC  可执行
     *      PROT_NONE  不可访问
     * __flags 映射标志
     *      MAP_ANONYMOUS 匿名映射,将虚拟内存映射到物理内存而非文件,忽略fd和offset参数(传0)
     *      MAP_PRIVATE 表示该内存映射的内容仅在本进程可见,且不会被其他进程所访问。
     *      MAP_SHARED 对映射区的写操作直接反映到时文件中
     *      MAP_DENYWRITE 拒绝其它对文件的写操作
     *      MAP_FIXED 若在start上无法创建映射,则失败(无此标志系统会自动调整)
     *__fd 文件描述符
     *__offset 文件偏移量,自动按页(4k)对齐
     * 返回值:成功返回映射区的起始地址,失败返回MAP_FAILED(-1)
     * */
    // 映射4096个字节的可读可写的内存
    void *p1 = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_ANONYMOUS);

    /*
     * 解除虚拟内存的映射
     * int munmap (void *__addr, size_t __len)
     * __addr 要解除映射内存的起始地址
     * __len 要解除映射的大小(按页圆整)
     *返回值:成功返回0,失败返回1
     * munmap 必需按页操作
     * */
    munmap(p1, 4096);
    return 0;
}

标签:__,MAP,映射,mmap,PROT,内存,munmap,虚拟内存
From: https://www.cnblogs.com/wtil/p/17103372.html

相关文章

  • 5.3虚拟内存把磁盘作为部分内存来使用
    接下来说一下虚拟内存虚拟内存是指把磁盘的一部分作为假想的内存来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)。通过借助虚拟......
  • mmap
    CProgramming原文链接:https://linuxhint.com/using_mmap_function_linux/HowtousemmapfunctioninClanguage?3yearsagoby BamdebGhoshThe mmap() fun......
  • c++虚拟内存
    可以通过调用vmemalloc类型对象的括号运算符(len,name)分配大小为len,文件名为name的虚拟内存。返回首地址的迭代器。无需delete,程序结束后会自动清空文件,但是保留文件名#......
  • 修改文件时mmap如何处理
    拷贝二进制(elf)文件在拷贝二进制文件的时候,如果文件是一个可执行文件,并且有一个进程在运行这个可执行文件,那么拷贝的时候会出现"文本忙"(ETXTBSY)的错误提示,并且拷贝失败......
  • 虚拟内存把磁盘作为部分内存来使用
    接下来说一下虚拟内存虚拟内存是指把磁盘的一部分作为假想的内存来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)。通过借助虚拟......
  • 进程相关概念、虚拟内存和物理内存映射关系
    学习地址进程和程序并发分时复用cpu单道程序设计多道程序设计cpu和mmu学习地址mmu在cpu内部虚拟内存和物理内存映射......
  • Linux的mmap文件内存映射机制
    在讲述文件映射的概念时,不可避免的要牵涉到虚存(SVR4的VM).实际上,文件映射是虚存的中心概念,文件映射一方面给用户提供了一组措施,好似用户将文件映射到自己地址空......
  • mmap详解
    p107内存映射,简而言之就是将内核空间的一段内存区域映射到用户空间。映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映......
  • linux 内存管理(四)malloc--mmap--brk
    用strace分析malloc内存申请过程。长话短说,申请内存空间一般就两种方法,一种是malloc,另一种是mmap映射空间。 在使用malloc()分配内存的时候,可能系统调用brk(),也可能调用m......
  • mmap: Operation not permitted
    char*map_shm=mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0);该种情况下会报mmap:Operationnotpermitted修改为char*map_shm=mmap(NULL,size,PROT_READ,......