mcpField
M
memory-safety-patterns

memory-safety-patterns

github.com/wshobson开发41.9k11.9k 次安装2 周前更新
代码仓库

关于 memory-safety-patterns

跨语言的内存安全编程模式指南,面向编写系统代码、管理资源或排查内存问题的开发者。内容介绍 RAII、所有权、智能指针及常见内存错误的防范方法。

主要功能

  1. 01常见内存错误分类
  2. 02RAII 与资源生命周期管理
  3. 03所有权和智能指针实践
  4. 04语言安全性取舍概述
  5. 05内存问题调试工具示例

适用场景

  1. 01编写内存安全的系统代码
  2. 02管理文件、套接字和内存资源
  3. 03排查泄漏、悬空指针与数据竞争

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshobson/agents --skill memory-safety-patterns

安装后在 Claude Code 中输入/memory-safety-patterns确认已加载。

附带文件references/details.md

详细介绍

内存安全模式

跨语言的内存安全编程模式,包括 RAII、所有权、智能指针和资源管理。

何时使用此技能

  • 编写内存安全的系统代码
  • 管理资源(文件、套接字、内存)
  • 防止释放后使用和泄漏
  • 实现 RAII 模式
  • 在语言之间进行安全选择
  • 调试内存问题

核心概念

1. 内存错误类别
错误类型描述预防方式
释放后使用访问已释放的内存所有权、RAII
双重释放两次释放同一内存智能指针
内存泄漏从不释放内存RAII、GC
缓冲区溢出写入超出缓冲区末尾边界检查
悬垂指针指向已释放内存的指针生命周期跟踪
数据竞争并发未同步访问所有权、同步
2. 安全谱系
Manual (C) → Smart Pointers (C++) → Ownership (Rust) → GC (Go, Java)
Less safe                                              More safe
More control                                           Less control

详细模式与示例

详细的模式文档位于 references/details.md。当上述导航层级不足时,请阅读该文件。

最佳实践

应该做的
  • 优先使用 RAII - 将资源生命周期与作用域绑定
  • 使用智能指针 - 在 C++ 中避免使用原始指针
  • 理解所有权 - 知道谁拥有什么
  • 检查边界 - 使用安全的访问方法
  • 使用工具 - AddressSanitizer、Valgrind、Miri
不应该做的
  • 不要使用原始指针 - 除非与 C 交互
  • 不要返回局部引用 - 悬垂指针
  • 不要忽略编译器警告 - 它们能捕获错误
  • 不要随意使用 unsafe - 在 Rust 中,尽量减少使用
  • 不要假设线程安全 - 要明确

调试工具

# AddressSanitizer (Clang/GCC)
clang++ -fsanitize=address -g source.cpp

# Valgrind
valgrind --leak-check=full ./program

# Rust Miri (undefined behavior detector)
cargo +nightly miri run

# ThreadSanitizer
clang++ -fsanitize=thread -g source.cpp

评论

支持 Markdown