mmap匿名映射区

在创建映射区时,我们创建了一个文件,后面又需要unlink删除,然后munmap释放内存映射区,所以一开始就没必要创建。
匿名映射区是指创建的映射区域不与任何文件关联,而是由操作系统分配的匿名内存。

mmap 内存映射里所谓的内存其实指的是虚拟内存,在调用 mmap 进行匿名映射的时候(比如进行堆内存的分配),是将进程虚拟内存空间中的某一段虚拟内存区域与物理内存中的匿名内存页进行映射,当调用 mmap 进行文件映射的时候,是将进程虚拟内存空间中的某一段虚拟内存区域与磁盘中某个文件中的某段区域进行映射。

优势:代码简洁了,不易出错,系统分配内存
局限性:匿名映射只能用于有血缘关系的进程之间,因为之间共享内存,其他进程因为没有指定名字,那没法通信
实验结果:和前面的分享结果一样

采用匿名映射区代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/wait.h>int var=100;int main(){int *p;pid_t pid;p=(int *)mmap(NULL,40,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);if(p==MAP_FAILED){  //注意不是p==NULLperror("mmap error");exit(1);}pid=fork();    //  创建子进程if(pid==0){*p=2000;     //写共享内存var=1000;printf("child,*p=%d,var=%d\n",*p,var);}else{sleep(1);printf("parent,*p=%d,var=%d\n",*p,var);wait(NULL);int ret=munmap(p,4);  //释放映射区if(ret==-1){perror("munmap error");exit(1);}}return 0;
}

之前的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/wait.h>int var=100;int main(){int *p;pid_t pid;int fd;fd=open("temp",O_RDWR|O_CREAT|O_TRUNC,0664);if(fd<0){perror("open error");exit(1);}unlink("temp");ftruncate(fd,4);//p=(int *)mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);p=(int *)mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_PRIVATE,fd,0);if(p==MAP_FAILED){  //注意不是p==NULLperror("mmap error");exit(1);}close(fd);    //映射区建立完毕,即可关闭文件pid=fork();    //  创建子进程if(pid==0){*p=2000;     //写共享内存var=1000;printf("child,*p=%d,var=%d\n",*p,var);}else{sleep(1);printf("parent,*p=%d,var=%d\n",*p,var);wait(NULL);int ret=munmap(p,4);  //释放映射区if(ret==-1){perror("munmap error");exit(1);}}return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/734048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中ElementPlus的按需导入

目录 1 新建一个Vue项目 2 安装ElementPlus 3 安装按需导入的组件 4 配置文件中添加相关内容 1 新建一个Vue项目 可看本人的这篇文章《创建一个Vue项目&#xff08;含npm install卡住不动的解决&#xff09;》 2 安装ElementPlus 在项目文件夹目录下&#xff0c;输入该指…

Hive的数据存储

Hive的数据存储在HDFS的&#xff1a;/user/hive/warehouse中 The /user folder in HDFS is a directory typically used to store user-specific data and configurations. It serves as the home directory for Hadoop users, analogous to the /home directory in Unix-like …

启发式算法:模拟退火算法

文章目录 退火的含义算法概述Metroplis准则算例-旅行商TSP问题退火的含义 退火(annealing)现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低之后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大自然在缓慢降温(亦即,退火)时,可“找到”最…

空间复杂度的OJ练习——轮转数组

旋转数组OJ链接&#xff1a;https://leetcode-cn.com/problems/rotate-array/ 题目&#xff1a; 思路&#xff1a; 通过题目我们可以知道这是一个无序数组&#xff0c;只需要将数组中的数按给定条件重新排列&#xff0c;因此我们可以想到以下几种方法&#xff1a; 1.暴力求解法…

C语言字符数组的输入与输出的详细说明

前记&#xff1a;由于c面向过程编程语言&#xff0c;不像C和java等面向对象的编程语言&#xff0c;没有string类。 只能凭借数组存储字符串。接下来是关于c语言的字符数组的输入输出的详细说明&#xff01; 一&#xff0c;输入函数 1.scanf() scanf这种格式串不能接收带空格的字…

【QT+QGIS跨平台编译】之七十五:【qgis_native.h生成】

文章目录 一、qgis_native.h介绍二、信息分析三、qgis_native.h生成一、qgis_native.h介绍 qgis_native.h 是 QGIS(Quantum GIS)软件中的一个头文件,主要用于包含 QGIS 底层系统的声明和定义。这个头文件中通常包含导出宏信息的定义。 二、信息分析 在qgis\src\native目录,…

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…

Qt QPainter的使用方法

重点&#xff1a; 1.QPainter在QWidget窗口的paintEvent中使用。 2.QPainter通常涉及到设置画笔、设置画刷、绘图&#xff08;QPen、QBrush、drawxx&#xff09;三个流程。 class Widget : public QWidget {Q_OBJECTprotected:void paintEvent(QPaintEvent *event) Q_DEC…

React组件(函数式组件,类式组件)

函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!-- 引…

seo蜘蛛池的概念!蚂蚁SEO

蜘蛛池是一种特殊的网络营销技术&#xff0c;它的主要作用是吸引搜索引擎爬虫&#xff0c;提高网站的收录和排名&#xff0c;从而增加网站的流量和曝光度。 蚂蚁SEO是一个SEO工具&#xff0c;可以帮助您提高网站权重&#xff0c;吸引更多的搜索引擎爬虫&#xff0c;提高网站的…

【Demo】游戏小地图

简介 该Demo基于2D关卡随机生成项目进行实现&#xff0c;旨在初步探索游戏小地图的制作。 演示 MiniMapDemo 资源下载 百度网盘&#xff08;提取码&#xff1a;1314&#xff09; 如果这篇文章对你有帮助&#xff0c;请给作者点个赞吧&#xff01;

6. Gin集成redis

文章目录 一&#xff1a;连接Redis二&#xff1a;基本使用三&#xff1a;字符串四&#xff1a;列表五&#xff1a;哈希六&#xff1a;Set七&#xff1a;管道八、事务九&#xff1a;示例 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/14-go-redi…

Linux多线程之线程控制

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、pthread_crate 二、pthread_join 三、p…

腾讯面经学习笔记

&#x1f496; 前言 &#x1f469;‍&#x1f3eb; 参考地址 &#x1f496; 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间&#xff08;程序上下文&#xff09;&#…

使用大型语言模型进行实体提取

原文地址&#xff1a;Using A Large Language Model For Entity Extraction LLM 能否比传统 NLP 方法更好地提取实体&#xff1f; 2022 年 7 月 12 日 Large Language Models for Generative Information Extraction: A Survey 实体简介 使用Co:here大型语言模型。 实体可以被视…

pytorch_retinaface训练Resnet50_Final.pth过程+无图版安装Nvidia+CUDA驱动GPU

背景 当前处于人脸检测分支&#xff0c;项目就是retinaface官方的代码加上数据集目录结构&#xff0c;目的是训练出最后的模型文件Resnet50_Final.pth 代码 https://gitee.com/congminglst/pytorch_-retinaface.git 项目结构与设计 图片数据集采用widerface&#xff0c; 前…

java实现pdf转word

java实现pdf转word 前言pom文件启动入口过滤器对象ConvertPdfToWordWithFlowableStructure转换实现类 前言 1.java实现pdf转word。 2.纯免费开源。 3.pdf解析完会生成word文件和图片文件夹。 4.无页码限制&#xff0c;文本类型生成到word中&#xff0c;图片生成到图片文件夹中…

基于 llvm 3.4 的C++重构工具

还未测试&#xff0c;存个档&#xff0c;未完待续 1,源码 Makefile LLVM_CONFIG?llvm-configifndef VERBOSE QUIET: endifSRC_DIR?$(PWD) LDFLAGS$(shell $(LLVM_CONFIG) --ldflags) COMMON_FLAGS-Wall -Wextra CXXFLAGS$(COMMON_FLAGS) $(shell $(LLVM_CONFIG) --cxxflags…

如何通过隐藏服务器真实IP来防御DDOS攻击

我们知道&#xff0c;服务器对外提供服务&#xff0c;基本上都是放置在公网上的。所以说服务器放置在公网上会面临很多攻击&#xff0c;如果不做好必要的防护措施&#xff0c;服务器被人攻击只是时间上的问题。 而我们面临的众多攻击中&#xff0c;DDoS攻击是最常见同时也是影响…

【Flink】Flink 的八种分区策略(源码解读)

Flink 的八种分区策略&#xff08;源码解读&#xff09; 1.继承关系图1.1 接口&#xff1a;ChannelSelector1.2 抽象类&#xff1a;StreamPartitioner1.3 继承关系图 2.分区策略2.1 GlobalPartitioner2.2 ShufflePartitioner2.3 BroadcastPartitioner2.4 RebalancePartitioner2…