- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个关于 Linux 中的 mmap 和 munmap 的简单问题:是否有可能 mmap
成功但 munmap 失败?
假设所有参数都正确给出,例如,请看下面的代码片段。什么情况下会打印munmap failed!
??
char *addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
... exit if mmap was not successful ...
... do some stuff using mmaped area ...
if( munmap(addr, 4096) == -1 ){
printf("munmap failed!\n");
}
最佳答案
是的,它可能会失败。来自 mmunmap man pages :
Upon successful completion, munmap() shall return 0; otherwise, it shall return -1 and set errno to indicate the error.
错误代码表明人们确实传递了无效参数。但是,如果您传递从 mmap() 获得的指针,并正确调整大小,那么它就不会失败。
Assuming all the parameters are correctly given,
那么就不会失败了。这就是为什么大多数实现 (99%) 只是不检查 unmmap() 的返回值。在这种情况下,即使它失败了,你也不能做任何事情(除了通知用户)。
关于c - 来自 munmap 的 Linux 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779556/
我有通过 mmap 创建的未命名进程间共享内存区域.进程是通过 clone 创建的系统调用。进程共享文件描述符表(CLONE_FILES)、文件系统信息(CLONE_FS)。进程不共享内存空间(除了先
当我尝试研究一些处理 FPGA 的代码时,我遇到了 munmap、mmap。 我仔细阅读了提供的手册 here .我仍然不明白这个功能的目的。这到底是做什么的? 最佳答案 mmap() 是一个系统调用
在 Mac 上,我使用 munmap 可以看到更高的页面回收率。 我的munmap的返回值为0,这表明请求的页面已成功取消映射。 当我使用以这种方式映射和取消映射的内存测试程序时,为什么会看到更高的页
我正在编写一个使用共享内存的函数库。我编写的用于关闭共享内存的函数每当到达 munmap() 部分时都会给我一个段错误,但如果我不使用该函数而只是让代码 munmap() 和 shm_unlink 最
我定义了一个名为 ClusterSet 的类,它只有一个字段,名为 clusters: class ClusterSet { std::map* > clusters; public:
我正在编写一个程序,并获得了一个内存位置,我将其存储为一个 unsigned int,并将映射的长度存储为一个 unsigned int,我想取消映射。 我的以下方法会生成警告: warning: p
我调用munmap没有错误,但映射仍然可见 /proc//maps当我尝试 mmap(address_overlapping_with_what_I_tried_to_munmap, ...)我没有得
如果一个进程调用 mmap(...,MAP_ANONYMOUS | MAP_SHARED,...) 并 fork N 个子进程,这些进程(父进程或后代进程)中的任何一个是否有可能 munmap() 一
例如,如果我这样做: char *pMap1; /* First mapping */ char *pReq; /* Address we would l
我想知道,为什么映射内存的大小应该作为一个参数传入,因为从同一地址开始的映射不能超过一个(可以吗?),为什么 linux 内核不记录两个起始地址, 长度在一起,但让用户空间程序记住它们。 我的意思是,
我试图优化 C 代码。当我使用 strace跟踪程序,我发现它一直在调用 mmap和 munmap .但是这段代码只是对使用 malloc() 分配的内存元素进行操作。 .有人可以解释为什么吗? 最佳
我想知道是否有必要(或建议)在通过 fork 创建的子进程中取消映射共享内存(使用 munmap),如果内存已获得在父级中,在 fork 之前,使用 mmap(..., MAP_ANONYMOUS |
我在 RHEL 5.8 上有一个多线程应用程序,它通过 mmap 读取大文件(每个文件大约 500MB)并对它们进行一些处理;一个线程执行 mmap,其他线程执行处理。当文件不再位于文件系统上时,将执
Open Group 标准规定应使用页对齐地址调用 munmap,但似乎没有任何要求 mmap 应返回页对齐地址。这是您在编写可移植代码时需要处理的事情吗? 最佳答案 mmap 只会映射整个页面,因此
我正在尝试使用辛普森规则进行数值积分,所以我认为最好的方法是在三个线程中,一个用于 2,一个用于 3,然后是结束边界。 但我是线程新手,仍在学习一些东西。但是,我真的不知道这有什么问题,我使用其属性创
有关于通过mmap分配内存的代码 void *ret = mmap(NULL, 4 * 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1
如果我在内存映射区域上使用 MS_ASYNC 调用 msync,同步过程将被异步处理。 但是,如果我立即对该区域调用 munmap,我是否可以假设 msync 将安全执行?或者我必须在 munmap
我对 C++ 比较陌生,正在学习其他人的代码。他的代码从映射文件中读取,但最终没有释放任何映射内存。以我的理解, mmap() 将文件映射到虚拟内存中。难道我不需要以某种方式释放那些映射内存,比如调用
我有一个关于 Linux 中的 mmap 和 munmap 的简单问题:是否有可能 mmap 成功但 munmap 失败? 假设所有参数都正确给出,例如,请看下面的代码片段。什么情况下会打印munma
我正在尝试为无交换系统实现一个文件支持的内存分配器。 对于每个新分配,我使用 mkstemp 创建一个临时文件作为后台存储,mmap 将其作为 MAP_SHARED 以允许交换页面当系统的内存压力很高
我是一名优秀的程序员,十分优秀!