内存那些事儿

本文深入探讨了C++内存模型,从栈、堆、数据段、代码段到各语言内存模型。讲解了进程与内存的关系,包括指针与引用、进程内存布局。详细阐述了函数栈帧的工作机制、内存分配时底层的系统调用,以及动态内存分配的原理。此外,还介绍了内存池技术、C++内存管理、线程与数据竞争、C++成员函数的存储方式和虚函数表解析。最后讨论了SSD与内存的区别以及内存管理中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、C++内存模型 

1.什么是内存

2.C++内存模型

(1)栈

(2)unused

(3)堆

(4)数据段

(5)代码段(text)

二、各语言内存模型

1.堆与栈的本质是什么

2.各语言内存模型

三、进程与内存

1.指针与引用

2.进程独占一个连续的4G大小的内存

四、函数运行时在内存中是什么样子?  

1.函数运行时栈 (run time stack)

2.栈帧(stack frames、call frames)

(1)栈帧

(2)控制转移

(3)传递参数与获取返回值

(4)局部变量

五、申请内存时底层发生了什么? 

1.内核态&用户态

(1)内核区

(2)用户区

2.标准库

3.malloc内存分配

六、自己实现malloc内存分配器

1.为什么要动态申请内存?

2.内存分配大致步

(1)跟踪内存分配状态

(2)怎样选择空闲内存块

(3)内存分配

(4)内存释放

七、内存池技术是如何实现的  

1.内存池技术

2.内存池技术原理

3.线程局部存储+内存池

4.内存池形式

 八、C++内存管理全景指南

1.线程与数据竞争

2. C++对象内存模型

(1)空类

(2)非空类

(3)非空虚基类

3.常见解决内存问题的方法

(1)静态代码检测

(2)动态代码检测

4.内存池优势

九、C++成员函数在内存中的存储方式

十、C++ 虚函数表解析

1.虚函数表

2.虚函数&析构函数

3.虚函数&继承

(1)一般继承(没有overwrite)

(2)一般继承(有虚函数覆盖)

(3)多重继承(无虚函数覆盖)

(4)多重继承(有虚函数覆盖)

十一、为什么SSD不能当做内存用? 

1.内存条和固态硬盘的区别

(1)内存条

(2)固态硬盘(SSD)

2.CPU是怎么访问文件内容的呢?

3.SSD寿命短

4.总结

十二、10 个内存引发的大坑,你能躲开几个?  

1.malloc后要初始化

2.malloc后要free


一、C++内存模型 

1.什么是内存

        内存的基本单位:字节。一个字节,8位:00000000

        当计算机在执行我们的程序时,无论是我们的机器指令还是机器指令操作的数据,都需要存放在这些小盒子中(内存)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值