关于 memory-safety-patterns
跨语言的内存安全编程模式指南,面向编写系统代码、管理资源或排查内存问题的开发者。内容介绍 RAII、所有权、智能指针及常见内存错误的防范方法。
主要功能
- 01常见内存错误分类
- 02RAII 与资源生命周期管理
- 03所有权和智能指针实践
- 04语言安全性取舍概述
- 05内存问题调试工具示例
适用场景
- 01编写内存安全的系统代码
- 02管理文件、套接字和内存资源
- 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