Linux使用内存映射文件做内存池
Linux使用内存映射文件做内存池
因为最近项目中需要实现一个临时数据高速存储,所以最近对内存映射文件做了一下了解,写出来与大家分享一下,因为个人水平有限也许会有这样那样的问题也恳请大家指正。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);
- /**
- * \struct NodeHeader
- * \brief 节点头
- */
- struct NodeHeader {
- unsigned int size; /**< 内存尺寸 */
- bool isActive; /**< 是否使用 */
- unsigned int refCount; /**< 引用数量 */
- NodeHeader *next;
- };
- /**
- * \struct Node
- * \brief 节点
- */
- struct Node {
- NodeHeader header; /**< 节点头 */
- char *data; /**< 数据 */
- };
- /**
- * \struct NodeList
- * \brief 节点列表
- */
- struct NodeList {
- NodeList *next;
- unsigned int size; /**< 列表中节点的尺寸 */
- NodeHeader *header; /**< 节点 */
- };
- /**
- * \struct NodeContext
- * \brief 节点列表目录
- */
- struct NodeContext {
- bool isInit; /**< 是否已经初始化*/
- unsigned int refCount; /**<引用计数器 */
- NodeList *list; /**< 节点列表头 */
- };
|
评论暂时关闭