0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux操作系统知识讲解:避免内存使用七大坑

如意 来源:Linux学习 作者:佚名 2020-08-28 11:12 次阅读

内存使用那些坑

1、C 内存泄露

在类的构造函数和析构函数中没有匹配地调用 new 和 delete 函数

Linux操作系统知识讲解:避免内存使用七大坑

没有正确地清除嵌套的对象指针

没有将基类的析构函数定义为虚函数

当基类的指针指向子类对象时,如果基类的析构函数不是 virtual,那么子类的析构函数将不会被调用,子类的资源没有得到正确释放,因此造成内存泄露

缺少拷贝构造函数,按值传递会调用(拷贝)构造函数,引用传递不会调用

指向对象的指针数组不等同于对象数组,数组中存放的是指向对象的指针,不仅要释放每个对象的空间,还要释放每个指针的空间

缺少重载赋值运算符,也是逐个成员拷贝的方式复制对象,如果这个类的大小是可变的,那么结果就是造成内存泄露

2、C 野指针

指针变量没有初始化

指针被 free 或 delete 后,没有设置为 NULL

指针操作超越了变量的作用范围,比如返回指向栈内存的指针就是野指针

访问空指针(需要做空判断)

sizeof 无法获取数组的大小

试图修改常量,如:char p=“1234”;p=‘1’;

3、C 资源访问冲突

多线程共享变量没有用 valotile 修饰

多线程访问全局变量未加锁

全局变量仅对单进程有效

多进程写共享内存数据,未做同步处理

mmap 内存映射,多进程不安全

4、STL 迭代器失效

被删除的迭代器失效

添加元素(insert/push_back 等)、删除元素导致顺序容器迭代器失效

错误示例:删除当前迭代器,迭代器会失效

Linux操作系统知识讲解:避免内存使用七大坑

正确示例:迭代器 erase 时,需保存下一个迭代器

Linux操作系统知识讲解:避免内存使用七大坑

5、C++ 11 智能指针

auto_ptr 替换为 unique_ptr

Linux操作系统知识讲解:避免内存使用七大坑

使用 make_shared 初始化一个 shared_ptr

Linux操作系统知识讲解:避免内存使用七大坑

weak_ptr 智能指针助手(1)原理分析:

Linux操作系统知识讲解:避免内存使用七大坑

(2)数据结构:

Linux操作系统知识讲解:避免内存使用七大坑

(3)使用方法:a. lock() 获取所管理的对象的强引用指针 b. expired() 检测所管理的对象是否已经释放 c. get() 访问智能指针对象

6、C++ 11 更小更快更安全

std::atomic 原子数据类型 多线程安全

std::array 定长数组开销比 array 小和 std::vector 不同的是 array 的长度是固定的,不能动态拓展

std::vector vector 瘦身 shrink_to_fit():将 capacity 减少为于 size() 相同的大小

td::forward_list

forward_list 是单链表(std::list 是双链表),只需要顺序遍历的场合,forward_list 能更加节省内存,插入和删除的性能高于 list

std::unordered_map、std::unordered_set用 hash 实现的无序的容器,插入、删除和查找的时间复杂度都是 O(1),在不关注容器内元素顺序的场合,使用 unordered 的容器能获得更高的性能六、 如何查看内存

系统中内存使用情况:/proc/meminfo

进程的内存使用情况:/proc/28040/status

查询内存总使用率:free

查询进程 cpu 和内存使用占比:top

虚拟内存统计:vmstat

进程消耗内存占比和排序:ps aux –sort -rss

释放系统内存缓存:/proc/sys/vm/drop_caches
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10981

    浏览量

    206676
  • 内存
    +关注

    关注

    8

    文章

    2760

    浏览量

    72694
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72880
收藏 人收藏

    评论

    相关推荐

    Linux操作系统基础知识学习

    本文是我在学校自学Linux时所做的笔记,纯理论,希望对大家有所帮助。文章中,Q表示问题,A表示回答。Linux操作系统概述Q1.什么是GNU?Linux与GNU有什么关系?A:1.G
    发表于 11-30 10:43

    死创业者的硬件产品——“十大坑

    死创业者的硬件产品——“十大坑”第一:错把产品原型当批量生产第二:以为可以修补bug;第三:什么都自己做;第四
    发表于 11-14 15:59

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    Linux操作系统原理及应用

    Linux操作系统原理及应用 1.1  操作系统的地位 1.2  操作系统的功能 1.3  操作系统的发
    发表于 04-28 14:53 0次下载

    什么是Linux操作系统

    什么是Linux操作系统  简单地说,Linux是一套
    发表于 12-26 12:04 1371次阅读

    Linux操作系统基础教程的详细资料讲解

    并不能使同学们通过这次系列讲座成为一个UNIX 类操作系统的高手,这次系列讲座的目的就是在同学们中间普及Linux 基础知识, 为今后我们更加接近的了解Linux 做一个好的开端。
    发表于 06-11 15:32 4次下载

    linux操作系统好学吗_要学什么

    linux操作系统的基础知识是比较好学的,但是需要我们通过大量地练习来牢记这些基础知识
    发表于 05-23 09:33 2865次阅读

    基于linux的十大操作系统排名

    基于linux内核开源的特性,并随着linux的不断发展,各种基于Linux操作系统版本也在不断发行出来,其中每一个不同版本的Linux
    发表于 07-10 16:23 1.5w次阅读

    Linux操作系统知识讲解:走进内存

    Linux操作系统知识讲解:走进内存
    的头像 发表于 08-28 10:30 2116次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:走进<b class='flag-5'>内存</b>

    Linux操作系统知识讲解:走进linux 内存地址空间

    Linux操作系统知识讲解:走进linux 内存地址空间
    的头像 发表于 08-28 10:45 4688次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:走进<b class='flag-5'>linux</b> <b class='flag-5'>内存</b>地址空间

    Linux操作系统知识讲解:走进Linux 内存分配算法

    Linux操作系统知识讲解:走进Linux 内存分配算法
    的头像 发表于 08-28 10:57 5085次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:走进<b class='flag-5'>Linux</b> <b class='flag-5'>内存</b>分配算法

    Linux操作系统知识讲解:走进Linux 内存使用场景

    Linux操作系统知识讲解:走进Linux 内存使用场景
    的头像 发表于 08-28 11:04 2688次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:走进<b class='flag-5'>Linux</b> <b class='flag-5'>内存</b>使用场景

    linux操作系统基础知识

    本文主要阐述了linux操作系统基础知识
    发表于 06-04 15:07 5771次阅读

    物联网WIFI模块AT指令版本七大坑

    物联网WIFI模块AT指令版本七大坑,看年你踩中几个!
    的头像 发表于 08-28 16:29 600次阅读

    linux属于什么操作系统

    Linux属于一种类UNIX操作系统Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX
    的头像 发表于 11-08 11:01 1611次阅读