mmap映射问题
来源:互联网 发布:手机网页编辑软件 编辑:程序博客网 时间:2024/05/28 15:47
1.多个进程mmap同一个文件会不会开辟多个内存?
2.munmap的时候,其他进程会不会受影响?
网上没有搜到自己想要的答案,只好自己做个实验
第一个问题代码没保存,思路是:两个进程同时mmap一个文件,同时往里面修改数据。
结果是:多个进程mmap同一个文件不会开辟多个内存。是共享同一片物理内存
int main(int argc, char **argv){ int fd; char *mapped_mem; int flength = 1024; char buf[100] = "进程1:"; fd = open("/home/dong/temp2", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); mapped_mem = (char*) mmap(0, flength, PROT_READ, MAP_SHARED, fd, 0); printf("地址:%x\n",(void *)mapped_mem); //memset(mapped_mem,0,1024);//注意对于刚创建的文件还没有任何东西,这时候去读它会出现段错误 for(int i=0; i<10; i++) { printf("%s\n", mapped_mem); sleep(1); } munmap(mapped_mem, flength); close(fd); return 0;}
int main(){ int flength = 1024; int fd = open("/home/dong/temp2", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); //S_IRUSR Permits the file's owner to read it. //S_IWUSR Permits the file's owner to write to it. printf("fd = %d\n",fd); char buf[100] = "进程2:"; char *mapped_mem = (char*) mmap(0, flength, PROT_READ, MAP_SHARED, fd, 0); printf("地址:%x\n",(void *)mapped_mem); for(int i=0; i<5; i++) { printf("%s\n", mapped_mem); sleep(1); } munmap(mapped_mem,flength); close(fd); return 0;}
可以看出来一个进程munmap之后,另一个进程照样可以读那片内存,可见munmap并没有释放那片物理内存。到底在什么时候释放呢?我猜测和智能指针一样,当最后一个指向这片内存的指针被释放的时候,这片内存就被释放了(只是猜测)
0 0
- mmap映射问题
- 文件内存映射mmap解决大文件快速读写问题
- Linux内存映射: mmap
- Linux内存映射: mmap
- mmap内存映射操作
- linux mmap 内存映射
- mmap内存映射
- mmap 共享 内存映射
- linux-内存映射mmap
- linux mmap 内存映射
- Linux内存映射: mmap
- linux 内存映射mmap
- Linux mmap内存映射
- linux mmap 内存映射
- linux mmap 内存映射
- mmap()内存映射
- mmap内存映射操作
- mmap内存映射操作
- SQL注入相关
- 关于内核缓冲区,和应用程序缓冲区
- 杭电5983之Pocket Cube
- Linker Tools Error LNK2019官方错误原因和个人碰到的一些问题
- C++作业3
- mmap映射问题
- JS範囲チェック追加
- 波动数列 蓝桥
- 判断是否子树
- Android设备双屏显示
- CodeForces 792A之New Bus Route
- 解决SpringMVC对js css等静态资源拦截
- JAVA——package语句、classpath环境变量配置
- hdu5606 Tree (并查集)