std::vector
替代std::list
,因vector
内存连续,访问速度更快且内存占用更少;避免频繁插入/删除时使用std::deque
(减少内存碎片)。int buffer[1024]
),减少堆内存分配次数;复用对象而非循环内创建临时对象(如std::string result
拼接时预分配空间result.reserve(large_vector.size())
)。void func(const std::string& str)
),避免拷贝;使用移动语义(C++11及以上,如std::move
)转移资源所有权,减少深拷贝开销。std::unique_ptr
(独占所有权,无需手动delete
)、std::shared_ptr
(共享所有权,引用计数)管理动态内存,避免内存泄漏;std::weak_ptr
打破shared_ptr
的循环引用(如观察者模式)。std::fstream
析构时自动关闭文件),减少手动管理错误。new/delete
调用次数和内存碎片。示例:通过std::pmr::memory_resource
(C++17)实现可扩展的内存池。std::pmr::vector
、std::pmr::string
等容器,配合std::pmr::monotonic_buffer_resource
(一次性分配,不释放)或std::pmr::unsynchronized_pool_resource
(线程安全,复用内存块),提升小对象分配效率。-O2
(平衡优化与编译时间)或-O3
(更激进的优化,可能增加代码大小)提升程序性能;-Os
(优化代码大小,适合嵌入式场景)。-flto
选项,在链接阶段进行跨模块优化,进一步提升性能(如内联函数、消除冗余代码)。__attribute__((aligned(16)))
(GCC)或alignas(16)
(C++11)对齐数据结构,提高CPU缓存利用率(如SIMD指令需要16字节对齐)。valgrind --leak-check=full ./your_program
检测内存泄漏(显示未释放的内存块及调用栈);memcheck
工具检查非法内存访问(如越界读写)。-fsanitize=address -g
选项,实时检测内存泄漏、越界访问和use-after-free错误,比Valgrind更快且支持多线程。valgrind --tool=massif ./your_program
分析内存使用趋势(如峰值内存、内存分配热点),帮助定位内存瓶颈。/etc/sysctl.conf
,设置vm.swappiness=10
(降低交换分区使用,优先使用物理内存)、vm.vfs_cache_pressure=50
(减少文件系统缓存占用),优化内存分配策略;运行sudo sysctl -p
使设置生效。sudo apt-get clean
(清理软件包缓存)、sudo apt-get autoremove
(移除无用依赖)、sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
(释放页缓存、目录项和inode缓存),释放系统内存。-static
选项,将依赖库打包到可执行文件中,减少运行时内存占用(适合无动态库环境的部署场景)。mmap
(<sys/mman.h>
)将大文件映射到内存,避免read/write
的系统调用开销(如处理GB级日志文件);文件修改后自动同步到磁盘(msync
)。std::allocator
),优化分配策略(如slab分配器减少碎片)。