🔗 Shared Memory Manager
基于 C++17 实现的共享内存管理系统
View on GitHub
C++
📋 项目简介
这是一个基于 C++17 实现的共享内存管理系统,提供了完整的内存池管理、分配、释放和持久化功能。系统采用模块化设计,代码结构清晰,易于维护和扩展。
✨ 核心特性
- 💾 内存池管理 - 固定大小内存池(1MB,256 × 4KB 块)
- 🔧 内存分配 - 首次适配(First Fit)算法,自动紧凑
- 🗑️ 内存释放 - 支持释放和删除用户内存
- 📝 内容管理 - 支持分配、读取、更新用户内容
- 💿 数据持久化 - 支持保存和加载内存池状态
- ⏰ 时间追踪 - 记录用户最后修改时间
- 📊 状态查询 - 提供详细的内存和块状态信息
- 📦 批量执行 - 支持从文件批量执行命令
🚀 快速开始
编译与运行
方式一:使用批处理脚本(推荐)
cd server
.\run.bat 方式二:手动编译
cd server
g++ -std=c++17 -Wall main.cpp command/commands.cpp shared_memory_pool/shared_memory_pool.cpp persistence/persistence.cpp -o main.exe
.\main.exe 💻 命令示例
# 查看帮助
server> help
server> help status
# 查看内存状态
server> status --memory
server> status --block
# 分配内存
server> alloc client_1 "Hello World"
# 读取用户内容
server> read client_1
# 释放用户内存
server> free client_1
server> delete client_1 # free 的别名
# 更新用户内容
server> update client_1 "Updated Content"
# 批量执行命令文件
server> exec sample.txt
# 紧凑内存
server> compact
# 重置内存池(需要密码确认)
server> reset
# 退出
server> quit 📁 项目结构
Shared-Memory-Manage-System/
├── server/
│ ├── main.cpp # 主程序入口,REPL 循环
│ ├── command/
│ │ ├── commands.h # 命令处理声明
│ │ └── commands.cpp # 命令处理实现
│ ├── shared_memory_pool/
│ │ ├── shared_memory_pool.h # 内存池类声明
│ │ └── shared_memory_pool.cpp # 内存池实现
│ ├── persistence/
│ │ ├── persistence.h # 持久化模块声明
│ │ └── persistence.cpp # 持久化模块实现
│ ├── run.bat # 编译运行脚本
│ └── build.bat # 编译脚本
├── details.md # 项目需求文档
└── README.md # 项目文档 🛠️ 技术栈
- 语言:C++17
- 编译器:g++ (MinGW-w64 / MSYS2)
- 标准库:STL(
vector,map,bitset,array) - 平台:Windows
📊 性能指标
- 内存池大小:1MB(256 × 4KB 块)
- 分配算法:首次适配(First Fit)+ 自动紧凑
- 时间复杂度:
- 分配:O(n) 最坏情况,n 为块数
- 紧凑:O(n)
- 释放:O(1)
- 查询:O(1) 到 O(n)
📝 数据持久化
系统支持将内存池状态保存到文件(memory_pool.dat),并在程序启动时自动加载。持久化文件格式包含:
- 文件头(魔数、版本号等)
- 元数据数组(256 个块的信息)
- Used Map(块使用状态)
- User Block Info(用户块映射)
- Pool Data(实际数据内容)
程序退出时(Ctrl+C、Ctrl+Z、quit/exit)会自动保存状态。
✅ 开发进度
| 功能模块 | 状态 | 完成度 |
|---|---|---|
| 内存池核心 | ✅ 完成 | 100% |
| 内存分配 | ✅ 完成 | 100% |
| 内存释放 | ✅ 完成 | 100% |
| 内存紧凑 | ✅ 完成 | 100% |
| 命令行界面 | ✅ 完成 | 100% |
| 状态查询 | ✅ 完成 | 100% |
| 内容读取 | ✅ 完成 | 100% |
| 批量执行 | ✅ 完成 | 100% |
| 数据持久化 | ✅ 完成 | 100% |
| TCP 服务器 | ⏳ 待实现 | 0% |
| 客户端程序 | ⏳ 待实现 | 0% |
⚠️ 注意事项
- 当前版本为服务器端核心功能实现,TCP 网络功能尚未集成
- 数据持久化功能已完成,支持程序退出时自动保存状态
- 内存池大小可在
shared_memory_pool/shared_memory_pool.h中通过kPoolSize常量调整 - 建议使用支持 C++17 的编译器(g++ 7.0+ 或 MSVC 2017+)
- 块 ID 显示格式为 3 位数字,不足 3 位用 0 填充(如
block_000,block_030) - 持久化文件
memory_pool.dat保存在服务器程序运行目录
如果这个项目对你有帮助,请给个 ⭐ Star!
Comment seems to stuck. Try to refresh?✨