根据侯捷老师的视频:https://www.bilibili.com/video/BV1Kb411B7N8
这篇文章归纳内存管理的面试题和一些知识点梳理
正在更新中

首先为什么想要内存管理

不知道有没有人好奇delete[]或者delete的时候为什么系统会自动这个变量 占了多少字节。
答案是因为cookies,每次内存获取的时候,系统都会额外分配4个字节的cookies用来标注这次分配内存会占用多少内存空间。
如图:
分配了长度为10的int数组,他在调用函数sizeof()的时候是占用了40字节,可是实际上在内存中占用了96字节。(42+32+40+4+12=96)42是(其中上下白色框61h换算十进制是97) cookies,记载这个变量占据的具体字节,32不知道是什么 ,40是用户希望分配的内存,4,是分配的数量,这里是10个int,delete[]会读取这里面的信息正确回收内存,12是系统分配内存为了凑出64的倍数。
这里调用delete可以回收全部的内存吗?
下图是《c++primer》这书中原文,但是根据new和delete的底层代码,这个说法是不全面的。

答案应该是有时候可以,因为int这里的析构函数没有意义,如果是其他object,析构函数有意义就不行。

这里直接调用delete可以回收pca,不能回收psa。
怎么理解
psa里面是string,有指针指向其他分配的地址,析构函数回收指针指向的地址。
可以理解为默认析构函数可以解决的内存管理都可以当做没用呢~
看到一篇文章是这样解释的:https://blog.csdn.net/chenjiayi_yun/article/details/22288805
在下一篇文章中我将讲一下malloc的模型,让大家更好理解

图中代码通过重载operation new,打印了size
不过mac的内存模型还是很奇怪,不加析构函数差了8个字节

c++管理内存使用new和delete,c用free和malloc。
转载:https://blog.csdn.net/qq_38282803/article/details/81462713?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1&spm=1001.2101.3001.4242
不过我觉得下列回答有些问题,请看内存管理(2)

侯捷老师说的内存管理三把大刀

  1. 普通的new------new
  2. array new----new object[]
  3. replacement new----new()

    要想接管c++的内存管理得重载operation new 和operation delete,当然最终还是调用malloc和free向系统获取,回收内存。
    这里是示例
    Foo类重载了4个紫色的函数,而函数内部仍然调用malloc和free。

为什么重载这四个函数可以接管这个类的内存管理呢?

c++的内存调度顺序是,new调用operation new,operation new调用malloc,其中能重载的只有operation new。

  1. C++内存分区?内存泄漏如何定位?栈会发生内存泄漏吗?
  2. 内存泄漏和内存溢出的区别?
  3. delete[]怎么知道要调用多少次析构函数
  4. delete 删除数组为什么会造成内存泄露?
  5. delete 和 delete[] 有什么区别
  6. C++ 内存模型
  7. Cpp 类对象的内存分布
  8. 内存对齐
  9. C++程序崩溃申请的内存会释放吗
  10. 为什么要数据对齐
  11. new和malloc区别
    下列来自腾讯面试题,内存管理考的很少,都是考对象模型

答案----------------------------------
12. 图1

内存泄漏如何定位:https://blog.csdn.net/mfcing/article/details/42673393

  1. 在析构函数中输出测试代码就可以了。随便提一下new[]的时候是一索引顺在这里插入图片描述
    序构造,delete[]是逆序析构。
  2. 问题不严谨,不是delete所有数组都会导致内存泄漏的,如果这个数组中的对象析构函数是没有意义的,如int,double这种就不会导致内存泄漏,泄漏的原因是只调用一次析构函数。当然只要是分配数组的内存最后都加上delete [],这是代码规范。
  3. delete调用一次析构函数,delete[]调用多次

C++内存管理(1)相关推荐

  1. jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理

    准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...

  2. 垃圾回收 内存管理 python

    20220225 https://mp.weixin.qq.com/s/94SmSNEkwmz-Eu-hBUo0Lg Python的内存管理机制 在windows 中直接在任务管理其中关掉python ...

  3. BEP 7:CUDA外部内存管理插件(下)

    BEP 7:CUDA外部内存管理插件(下) Numba依赖 向库中添加EMM插件的实现自然会使Numba成为库的依赖项,而以前可能没有.为了使依赖关系可选,如果需要的话,可以有条件地实例化并注册EMM ...

  4. BEP 7:CUDA外部内存管理插件(上)

    BEP 7:CUDA外部内存管理插件(上) 背景和目标 在CUDA阵列接口使得能够共享不同的Python之间的数据库的访问CUDA设备.但是,每个库都与其它库区别对待.例如: • Numba在内部管理 ...

  5. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...

  6. 操作系统--内存管理方式

    "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...

  7. python基于值得内存_为什么说Python采用的是基于值的内存管理模式

    匿名用户 1级 2018-01-31 回答 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++, ...

  8. linux内核 -内存管理模块概图

    1.从进程(task)的角度来看内存管理 每个进程对应一个task_struct; 每个task_struct 里面包含指向mm_struct 的指针mm, mm_struct 里面的主要成员: a. ...

  9. linux内存管理 之 内存节点和内存分区(Zone)

    https://www.cnblogs.com/youngerchina/p/5624516.html Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理 ...

  10. 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化

    一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...

最新文章

  1. 关于JVM,你需要掌握这些!!
  2. c++ django上传图片
  3. xml 属性value换行显示_python 标准库之xml.etree.ElementTree
  4. php mysql 预编译语句_php mysql 预编译
  5. android 自定义菜单开发,Android开发学习笔记:浅谈3大类菜单
  6. 浏览器专属 CSS Hack:区分 Firefox / Opera / Safari / Internet Explorer
  7. CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
  8. Java中int和Integer的区别
  9. 无人驾驶(在apollo中添加新车辆)
  10. cfiledialog 保存 扩展名_吃不完的红薯很难保存?教你一招,放1年不烂不发芽,简单实用...
  11. 汇编语言 emu8086 电子时钟 课程设计
  12. 产品配件类目税目分类_终于找到了!“税收分类编码大全”,有这一篇就够了!...
  13. 基于ERDAS软件的高分三号(GF-3)SAR影像的预处理
  14. excel多元线性拟合_使用Excel数据分析工具进行多元回归分析的方法
  15. 计算机 host id是指,关于如何修改hostid的问题Windows系统 -电脑资料
  16. powerdesigner与mysql_powerdesigner、mysql
  17. 连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册
  18. rectpuls函数 matlab,Matlab中的rectpuls函数解析
  19. GitBook运行报错 - Error: ENOENT: no such file or directory, stat
  20. VB程序打包,生成安装程序

热门文章

  1. java codepointbefore_Java StringBuilder codePointBefore()方法与示例
  2. 单体预聚合的目的是什么_高分子化学实验指导书-修改-2012
  3. python复制文件的代码_python 复制文件流程
  4. 用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使...
  5. 【转】linx 设备名字来由 sd sr sg st
  6. 【转】Microsoft Teams快速上手系列-02Teams组成概述及使用分享
  7. c#进阶(1)—— Task Parallel Library 并行执行与串行执行
  8. 【转】聊聊分布式事务,再说说解决方案
  9. python做excel表格代码_python操作excel表格
  10. Qt:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800