因为最近项目中需要实现一个临时数据高速存储,所以最近对内存映射文件做了一下了解,写出来与大家分享一下,因为个人水平有限也许会有这样那样的问题也恳请大家指正。mmap是linux内存映射文件,是将文件映射成为内存地址空间的一种方式,其实,方法很简单。
- memfd = open(MEMFILE, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR);
- memd = mmap(NULL, (sizeof(Type)) * size, PROT_WRITE | PROT_READ,
- MAP_SHARED, memfd, 0);
我们的程序现在拥有了一定的地址空间,代码中也获得了一个指向首地址的指针,www.linuxidc.com 那我们该怎么使用他呢?其实,大家想怎么用就怎么用,不过我们还是采用一定的方法将这些地址空间管理起来,定义一下结构体来对内存进行结构化管理:
- /**
- * struct NodeHeader
- * rief 节点头
- */
- struct NodeHeader {
- unsigned int size; /**< 内存尺寸 */
- bool isActive; /**< 是否使用 */
- unsigned int refCount; /**< 引用数量 */
- NodeHeader *next;
- };
-
-
- /**
- * struct Node
- * rief 节点
- */
- struct Node {
- NodeHeader header; /**< 节点头 */
- char *data; /**< 数据 */
- };
-
-
- /**
- * struct NodeList
- * rief 节点列表
- */
- struct NodeList {
- NodeList *next;
- unsigned int size; /**< 列表中节点的尺寸 */
- NodeHeader *header; /**< 节点 */
- };
-
- /**
- * struct NodeContext
- * rief 节点列表目录
- */
- struct NodeContext {
- bool isInit; /**< 是否已经初始化*/
- unsigned int refCount; /**<引用计数器 */
- NodeList *list; /**< 节点列表头 */
- };