c - linux中匿名内存映射映射到哪个文件?
问题描述
我的问题是,当我们创建匿名内存映射时,映射到进程地址空间的文件是什么。我知道匿名映射保证用零填充。然后是/dev/zero文件吗?据我了解,只有在参与进程的地址空间内映射了某个文件之后,才能进行进程间通信……无论是tmpfs中的文件还是普通文件系统中的文件。我是Inter Process Communication的新手,如果您发现我的理解有任何缺陷,请纠正。
解决方案
来自man mmap
:
MAP_ANONYMOUS
映射没有任何文件支持;[...]
它只是分配和初始化内存。在调用 之前mmap
,由于虚拟内存未映射到真实内存,您会在尝试访问内存时遇到保护冲突 (SIGSEGV)。(嗯,这就是在具有虚拟内存的系统中发生的情况。)
推荐阅读
- c++ - 减去整数数组的索引的结果
- mips - 程序一直显示“存储中未对齐的地址:0x100100d2”错误
- django - Django Todo App - 按外键过滤导致 TypeError
- laravel - 在 maatwebsite excel 导出/导入中,我需要插入名称而不是 id
- bash - 在数字列表中添加前导空格?
- drop-down-menu - 如何从按钮移动下拉菜单框的位置?
- gitlab - 即使组在重新配置期间拥有该文件夹,Gitlab 也没有启动并尝试执行 chgrp 命令
- gcc - 找不到 -ll collect2:错误:ld 返回 1 退出状态
- reactjs - UseEffect 或在功能组件中抛出逻辑
- pycharm - 无法在 Windows 10 PC 中打开我的 PyCharm 应用程序?