首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从函数调用时,munmap()不起作用

从函数调用时,munmap()不起作用。

munmap()是一个系统调用函数,用于解除对内存映射区域的映射关系。它的作用是将之前通过mmap()函数创建的内存映射区域从进程的虚拟地址空间中移除。

通常情况下,munmap()函数应该能够正常工作并成功解除映射关系。但是如果在函数调用时munmap()不起作用,可能有以下几种可能的原因:

  1. 参数错误:munmap()函数需要传入正确的参数,包括映射区域的起始地址和长度。如果参数错误,比如传入的地址不是有效的映射区域起始地址,或者长度超出了映射区域的范围,那么munmap()函数可能会失败。
  2. 权限问题:munmap()函数需要对映射区域有足够的权限才能解除映射关系。如果当前进程没有足够的权限,比如没有对映射区域的写权限,那么munmap()函数可能会失败。
  3. 映射区域已经解除映射:如果在函数调用时,映射区域已经被其他方式解除映射,比如通过其他的munmap()函数调用或者进程终止,那么再次调用munmap()函数可能会失败。
  4. 操作系统或硬件问题:在极少数情况下,可能会出现操作系统或硬件的问题导致munmap()函数不起作用。这种情况下,可能需要进一步调查和排除其他可能的原因。

总之,如果在函数调用时munmap()不起作用,可以先检查参数是否正确,确保有足够的权限,并确认映射区域没有被其他方式解除映射。如果问题仍然存在,可能需要进一步调查和排除其他可能的原因。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云原生):https://cloud.tencent.com/product/scf
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云安全产品:https://cloud.tencent.com/solution/security
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云虚拟专用网络(VPC):https://cloud.tencent.com/product/vpc
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

函数Callback —同步思维切换到异步思维

html 进行处理') html = requests.get('url') parse(html) 这是一种非常常见的直线性思维,我先请求网站拿到 html,然后我再把 html 传给负责处理的函数...于是,有些同学会修改代码,多包装一层函数: import aiohttp import asyncio async def request(url): async with aiohttp.ClientSession...get(url)) await asyncio.gather(*tasks) if __name__ == '__main__': asyncio.run(main()) get()函数整体负责获取一个...然后让get()函数异步。 这样做确实能够解决问题,但是大家如果仔细体会就会发现,在get()函数里面的代码写法,还是用的同步处理的思想。...与其让我们去等待它完成,然后再把完成结果传给另外一个函数。不如让这些请求在结束的时候,自行主动把结果传给处理函数

75440

c语言入门到实战——回函数与qsort的讲解和模拟实现

函数与qsort的讲解和模拟实现 前言 回函数是一个函数,它作为参数传递给另一个函数,并且能够在该函数内部被调用。在C语言中,回函数通常被用于实现事件处理和排序算法中。...qsort是一个使用回函数的示例,它允许用户自定义排序规则,从而适应不同的排序需求。通过模拟实现qsort,可以深入了解回函数在排序算法中的应用。 1. 回函数是什么?...C语言中,回函数是指将一个函数作为参数传递给另一个函数,并在后者中被调用的函数。 一般情况下,回函数被用来在程序中实现事件处理和消息传递等机制。...最后,我们通过调用 accept_callback 函数,并传入一个整数以及回函数的指针,实现了回函数的调用和结果输出。...需要注意的是,回函数的实现和使用需要满足一定的约定,例如回函数的参数和返回值类型需要与被调用函数的要求一致,否则会导致程序运行错误。 回函数就是一个通过函数指针调用的函数

9110

【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )

文章目录 一、do_munmap 函数执行流程 二、do_munmap 函数源码 munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap...函数 , do_munmap 函数 是 删除 内存映射 的 核心函数 ; 一、do_munmap 函数执行流程 ---- do_munmap 函数执行流程 : 根据 unsigned long start..., 将要删除的 " 虚拟内存区域 " 进程的 虚拟内存区域 链表 和 红黑树 数据结构中删除 , 这些内存区域 单独放在一个临时链表中 ; /* * Remove the vma's, and...进程 的 页表中 的 " 被删除内存区域 对应的 映射 " 删除 , 处理器 页表缓存 中 也 删除对应 映射 ; unmap_region(mm, vma, prev, start, end);...---- do_munmap 函数 , 定义在 Linux 内核源码 linux-4.12\mm\mmap.c#2620 位置 ; do_munmap 函数源码如下 : /* Munmap is split

62220

Linux mmap 的作用是什么?

MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。 fd:有效的文件描述词。...解除映射函数: #include int munmap(void *addr, size_t length); 成功执行时,munmap()返回0。...同步函数: int msync(void *addr, size_t len, int flags) 一般说来,进程在映射空间的对共享内容的改变并不直接写回到磁盘文件中,往往在调用 munmap() 后才执行该操作...4.如果不存在,则通过inode定位到文件磁盘地址,将数据磁盘复制到页缓存。之后再次发起读页面过程,进而将页缓存中的数据发给用户进程。...这样造成读文件时需要先将文件页磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到用户空间内存。

29530

认真分析mmap:是什么 为什么 怎么用【转】

缺页异常进行一系列判断,确定无非法操作后,内核发起请求页过程。 页过程先在交换缓存空间(swap cache)中寻找需要访问的内存页,如果没有则调用nopage函数把所缺的页磁盘装入到主存中。...mmap和常规文件操作的区别 对linux文件系统不了解的朋友,请参阅我之前写的博文《内核文件系统看文件读写过程》,我们首先简单的回顾一下常规文件系统操作(调用read/fread等类函数)中,函数的调用过程...如果不存在,则通过inode定位到文件磁盘地址,将数据磁盘复制到页缓存。之后再次发起读页面过程,进而将页缓存中的数据发给用户进程。...MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。 flag fd:有效的文件描述词。...如果MAP_ANONYMOUS被设定,为了兼容问题,其值应为-1 offset:被映射对象内容的起点 相关函数 int munmap( void * addr, size_t len ) 成功执行时,munmap

3.2K32

进程间通信

晓得了吧 这个pipe管道可以理解为匿名管道,是基于文件描述符的通信方式,使用时两个进程必须有血缘关系,父子进程之间的通信。...放码出来: #include int pipe(int filedes[2]); //成功返回0,失败返回-1 pipe函数在内存中开辟一块缓冲区,由filedes参数传出给用户程序使用的两个文件描述符...fd为即将映射到进程空间的文件描述字,一般由open()返回 offset参数一般设为0,表示文件头开始映射。...(必须是页大小的整数倍(4K)) 函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。...//系统调用munmap() int munmap( void * addr, size_t len ) /*该调用在进程地址空间中解除一个映射关系,addr是调用mmap()时返回的地址,len是映射区的大小

82720

MIT 6.S081 Lab Ten -- mmap

现在,只需mmap和munmap返回错误。我们在kernel/fcntl.h中为您定义了PROT_READ等。运行mmaptest,它将在第一次mmap调用时失败。 惰性地填写页表,以响应页错误。...运行mmaptest;它应该到达第一个munmap。 实现munmap:找到地址范围的VMA并取消映射指定页面(提示:使用uvmunmap)。...根据提示1,首先是配置mmap和munmap系统调用,此前已进行过多次类似流程,不再赘述。...根据提示2、3、4,参考lazy实验中的分配方法(将当前p->sz作为分配的虚拟起始地址,但不实际分配物理页面),此函数写在sysfile.c中就可以使用静态函数argfd同时解析文件描述符和struct...根据提示6实现munmap,且提示7中说明无需查看脏位就可写回 uint64 sys_munmap(void) { uint64 addr; int length; if(argaddr(0

23330

C++进程间通信 详解2

使用时,直接传递NULL length:欲创建映射区的大小 prot: 映射区权限PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE flags:标志位参数(常用于设定更新物理区域...fd:用来建立映射区的文件描述符 offset:映射文件的偏移(4k的整数倍) 9. munmap函数 同malloc函数申请内存空间类似的,mmap建立的映射区在使用结束后也应调用类似free的函数来释放...借鉴malloc和free函数原型,尝试装自定义函数smalloc,sfree来完成映射区的建立和释放。思考函数接口该如何设计?...mmap使用时常常会出现总线错误,通常是由于共享文件存储空间大小引起的。 munmap传入的地址一定是mmap的返回地址。...if (munmap(pdst, len) < 0) 104 { 105 perror("munmap dst err:"); 106 exit(1);

29710

【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

malloc / free / ptmalloc / jemalloc / tcmalloc ) 二、内核空间内存管理 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap...申请内存 , 然后将申请的内存 分成 ” 内存块 “ 分配给 用户空间 的 ” 应用程序 " 二、内核空间内存管理 ---- 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap...) 在 " 内核空间 " 中 , 调用 Linux 内核中的 sys_brk / sys_mmap / sys_munmap 函数 , 管理 " 堆内存 " ; sys_brk 通过修改 堆内存 的...终止地址 , 扩张 / 收缩 堆内存 ; sys_mmap 在 " 内存映射区 " 分配 " 虚拟内存页 " ; sys_munmap 释放 " 虚拟内存页 " ; 上述函数属于 " 虚拟内存管理 “..., 虚拟内存管理 ” 进程虚拟地址空间 “ 分配 / 释放 ” 虚拟内存页 " ; 2、sys_brk、sys_mmap 系统调用 可参考 【Linux 内核 内存管理】Linux 内核堆内存管理

94010

mmap 分析

10、缺页异常进行一系列判断,确定无非法操作后,内核发起请求页过程。...11、页过程先在交换缓存空间(swap cache)中寻找需要访问的内存页,如果没有则调用nopage函数把所缺的页磁盘装入到主存中。...如果不存在,则通过inode定位到文件磁盘地址,将数据磁盘复制到页缓存。之后再次发起读页面过程,进而将页缓存中的数据发给用户进程。...MAP_NONBLOCK: 仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。 fd: 要映射到内存中的文件描述符。...内存映射文件的例子 munmap函数 为某个进程的地址空间解除一段映射关系,我们调用munmap: int munmap( void * addr, size_t len); 当进程终止时,该进程的映射内存会自动解除

53700

Linux内存映射——mmap

munmap执行相反的操作,删除特定地址区域的对象映射。...对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次输入文件到共享内存区,另一次共享内存区到输出文件。...MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。 fd:有效的文件描述词。...这个函数建立页表为这个虚拟地址范围 virt_addr 到 virt_addr_size. pfn 页帧号, 对应虚拟地址应当被映射的物理地址....这个函数影响物理地址 (pfn<<PAGE_SHIFT) 到 (pfn<<PAGE_SHIFT)+size. size 正在被重新映射的区的大小, 以字节.

5.6K10

postgresql email列表对NVM WAL BUFFER的讨论

现在,有点担心对于每个段文件mmap/munmap带来的消耗。 同时提到内存映射IO的SIGBUS问题,坏的内存块读取时会有这个问题,向这个块[3]写时也有这个问题。未来会处理这个问题。...带来的消耗 mmap/munmap每个WAL段文件的消耗与write一个block的消耗谁更大。...作者会测试Heikki所说的使用mmap和munmap映射每个段文件,来看是否合理。 Mmap/munmap可伸缩性确实很差,但是不认为会影响我们,因为PG不是多线程。...如果不起作用,检查PM和DAX的内核配置选项,比如CONFIG_FOOBAR,是否配置正确。...分析后,XlogFlush函数可以通过NVM WAL BUFFER提升,但是会影响CopyXlogRecordToWAL的性能。可能和PM比DRAM的memcpy延迟高有关。

60110

mmap详解

这样,进程对某一虚拟内存区域的任何操作需要用要的信息,都可以vm_area_struct中获得。mmap函数就是要创建一个新的vm_area_struct结构,并将其与文件的物理磁盘地址相连。...10、缺页异常进行一系列判断,确定无非法操作后,内核发起请求页过程。...11、页过程先在交换缓存空间(swap cache)中寻找需要访问的内存页,如果没有则调用nopage函数把所缺的页磁盘装入到主存中。...MAP_NONBLOCK: 仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。 fd: 要映射到内存中的文件描述符。...内存映射文件的例子 munmap函数 为某个进程的地址空间解除一段映射关系,我们调用munmap: int munmap( void * addr, size_t len); 当进程终止时,该进程的映射内存会自动解除

2K20

【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

文章目录 一、mmap 创建内存映射代码示例 1、fopen 打开或创建文件 2、lseek 设置文件大小 3、mmap 函数使用 4、munmap 删除内存映射 二、完整代码示例 一、mmap 创建内存映射代码示例...10 个 student 结构体大小 // 修改文件偏移量 , 将文件的读写位置指向文件头后 , // 再增加 sizeof(student) * 10 - 1 偏移量 , 偏移量...; return -1; } // 创建完文件映射之后 , 文件描述符就可以释放了 close(fd); 4、munmap 删除内存映射 调用 munmap 函数...| O_TRUNC, 00777); // 修改文件偏移量 , 将文件的读写位置指向文件头后 , // 再增加 sizeof(student) * 10 - 1 偏移量 , 偏移量...\n"); // 休眠 8 秒 sleep(8); // 删除文件映射 munmap(p_student, sizeof(student) * 10);

1.4K10
领券