目录

🔗 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!

https://github.com/AAAAAZBX/Shared-Memory-Manager

Comment seems to stuck. Try to refresh?✨