C++内存管理(1)
根据侯捷老师的视频: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)
侯捷老师说的内存管理三把大刀
- 普通的new------new
- array new----new object[]
- replacement new----new()
要想接管c++的内存管理得重载operation new 和operation delete,当然最终还是调用malloc和free向系统获取,回收内存。
这里是示例
Foo类重载了4个紫色的函数,而函数内部仍然调用malloc和free。
为什么重载这四个函数可以接管这个类的内存管理呢?
c++的内存调度顺序是,new调用operation new,operation new调用malloc,其中能重载的只有operation new。
- C++内存分区?内存泄漏如何定位?栈会发生内存泄漏吗?
- 内存泄漏和内存溢出的区别?
- delete[]怎么知道要调用多少次析构函数
- delete 删除数组为什么会造成内存泄露?
- delete 和 delete[] 有什么区别
- C++ 内存模型
- Cpp 类对象的内存分布
- 内存对齐
- C++程序崩溃申请的内存会释放吗
- 为什么要数据对齐
- new和malloc区别
下列来自腾讯面试题,内存管理考的很少,都是考对象模型
答案----------------------------------
12. 图1
内存泄漏如何定位:https://blog.csdn.net/mfcing/article/details/42673393
- 在析构函数中输出测试代码就可以了。随便提一下new[]的时候是一索引顺在这里插入图片描述
序构造,delete[]是逆序析构。 - 问题不严谨,不是delete所有数组都会导致内存泄漏的,如果这个数组中的对象析构函数是没有意义的,如int,double这种就不会导致内存泄漏,泄漏的原因是只调用一次析构函数。当然只要是分配数组的内存最后都加上delete [],这是代码规范。
- delete调用一次析构函数,delete[]调用多次
C++内存管理(1)相关推荐
- jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理
准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...
- 垃圾回收 内存管理 python
20220225 https://mp.weixin.qq.com/s/94SmSNEkwmz-Eu-hBUo0Lg Python的内存管理机制 在windows 中直接在任务管理其中关掉python ...
- BEP 7:CUDA外部内存管理插件(下)
BEP 7:CUDA外部内存管理插件(下) Numba依赖 向库中添加EMM插件的实现自然会使Numba成为库的依赖项,而以前可能没有.为了使依赖关系可选,如果需要的话,可以有条件地实例化并注册EMM ...
- BEP 7:CUDA外部内存管理插件(上)
BEP 7:CUDA外部内存管理插件(上) 背景和目标 在CUDA阵列接口使得能够共享不同的Python之间的数据库的访问CUDA设备.但是,每个库都与其它库区别对待.例如: • Numba在内部管理 ...
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...
- 操作系统--内存管理方式
"碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...
- python基于值得内存_为什么说Python采用的是基于值的内存管理模式
匿名用户 1级 2018-01-31 回答 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++, ...
- linux内核 -内存管理模块概图
1.从进程(task)的角度来看内存管理 每个进程对应一个task_struct; 每个task_struct 里面包含指向mm_struct 的指针mm, mm_struct 里面的主要成员: a. ...
- linux内存管理 之 内存节点和内存分区(Zone)
https://www.cnblogs.com/youngerchina/p/5624516.html Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理 ...
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...
最新文章
- 关于JVM,你需要掌握这些!!
- c++ django上传图片
- xml 属性value换行显示_python 标准库之xml.etree.ElementTree
- php mysql 预编译语句_php mysql 预编译
- android 自定义菜单开发,Android开发学习笔记:浅谈3大类菜单
- 浏览器专属 CSS Hack:区分 Firefox / Opera / Safari / Internet Explorer
- CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
- Java中int和Integer的区别
- 无人驾驶(在apollo中添加新车辆)
- cfiledialog 保存 扩展名_吃不完的红薯很难保存?教你一招,放1年不烂不发芽,简单实用...
- 汇编语言 emu8086 电子时钟 课程设计
- 产品配件类目税目分类_终于找到了!“税收分类编码大全”,有这一篇就够了!...
- 基于ERDAS软件的高分三号(GF-3)SAR影像的预处理
- excel多元线性拟合_使用Excel数据分析工具进行多元回归分析的方法
- 计算机 host id是指,关于如何修改hostid的问题Windows系统 -电脑资料
- powerdesigner与mysql_powerdesigner、mysql
- 连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册
- rectpuls函数 matlab,Matlab中的rectpuls函数解析
- GitBook运行报错 - Error: ENOENT: no such file or directory, stat
- VB程序打包,生成安装程序
热门文章
- java codepointbefore_Java StringBuilder codePointBefore()方法与示例
- 单体预聚合的目的是什么_高分子化学实验指导书-修改-2012
- python复制文件的代码_python 复制文件流程
- 用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使...
- 【转】linx 设备名字来由 sd sr sg st
- 【转】Microsoft Teams快速上手系列-02Teams组成概述及使用分享
- c#进阶(1)—— Task Parallel Library 并行执行与串行执行
- 【转】聊聊分布式事务,再说说解决方案
- python做excel表格代码_python操作excel表格
- Qt:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800