文章目录
- @[toc]
- 1.c++程序的内存分布
- C++程序的内存分布
- 面试官的追问及回答
- 2.堆和栈的区别
- 堆和栈的区别
- 1. 管理方式
- 2. 内存分配和释放
- 3. 内存大小和生命周期
- 4. 访问权限
- 面试官的追问及回答
- 3.内存泄漏怎么办
- 内存泄漏的处理方法
- 面试官的追问及回答
- 4.智能指针,哪几种
- 智能指针及其种类
- 面试官的追问及回答
- 5.循环引用计数最后是多少
- 回答
- 追问及答案
- 6.shared_ptr线程安全吗
- 对`shared_ptr`线程安全性的回答
- 面试官的追问及回答
- 7.多线程使用shared_ptr如何保护数据安全
- 回答
- 面试官追问及回答
- 8.条件变量伪唤醒
- 对条件变量伪唤醒的回答
- 面试官的追问及回答
- 9.unique_ptr转移所有权
- 对`std::unique_ptr`所有权转移的回答
- 面试官的追问及回答
- 10.move实现方式
- 回答
- 示例代码
- 追问与答案
- 11.完美转发有什么用
- 完美转发的作用
- 面试官的追问及回答
- 12.模板的特化和偏特化
- 模板的特化和偏特化
- 回答
- 面试官追问
- 13.c++和c申请内存方式的区别
- C++和C申请内存方式的区别
- C语言中的动态内存申请
- C++中的动态内存申请
- 面试官追问及回答
- 14.c++释放数组和普通对象的区别
- C++释放数组和普通对象的区别
- 回答
- 面试官追问
- 15.动态多态虚表的位置在哪
- 动态多态虚表的位置
- 虚表的位置
- 示例说明
- 面试官的追问及回答
- 16.有序数组去重不用额外空间
- 回答
- 面试官追问
- 17.二叉树度为0和度为2的数量关系
- 二叉树中度为0(叶子节点)和度为2(满二叉节点)的数量关系
- 节点分类与数量关系
- 特殊情况
- 面试官的追问及回答
- 18.哈夫曼树构建过程
- 哈夫曼树构建过程
- 回答
- 面试官追问
- 19.快排最坏情况发生
- 19. 快排最坏情况发生
- 回答
- 面试官追问
- 20.递归算法对比循环的问题
- 递归算法对比循环的问题
- 递归算法的优势与局限
- 循环的优势与局限
- 面试官的追问及回答
- 21.优先队列的实现
- 21. 优先队列的实现
- 回答
- 面试官追问
- 22.有一个超大文件,无法一次性加载到内存,如何排序
- 超大文件的排序策略
- 步骤一:文件分割与排序
- 步骤二:多路归并
- 示例说明
- 面试官的追问及回答
- 23.B+树对比普通树,红黑树的区别,为什么不用B树
- B+树对比普通树、红黑树的区别,以及为何不用B树
- B+树与普通树的区别
- B+树与红黑树的区别
- 为何不用B树
- 面试官追问
- 24.HTTP 1/2/3版本的区别
- HTTP 1/2/3版本的区别
- HTTP/1.1
- HTTP/2
- HTTP/3
- 面试官追问及回答
- 25.HTTP Cookie作用
- HTTP Cookie作用
- 回答
- 面试官追问
- 26.TCP拥塞控制方法
- TCP拥塞控制方法
- 一、慢启动阶段
- 二、拥塞避免阶段
- 三、快重传阶段
- 四、快恢复阶段
- 面试官追问及回答
文章目录
- @[toc]
- 1.c++程序的内存分布
- C++程序的内存分布
- 面试官的追问及回答
- 2.堆和栈的区别
- 堆和栈的区别
- 1. 管理方式
- 2. 内存分配和释放
- 3. 内存大小和生命周期
- 4. 访问权限
- 面试官的追问及回答
- 3.内存泄漏怎么办
- 内存泄漏的处理方法
- 面试官的追问及回答
- 4.智能指针,哪几种
- 智能指针及其种类
- 面试官的追问及回答
- 5.循环引用计数最后是多少
- 回答
- 追问及答案
- 6.shared_ptr线程安全吗
- 对`shared_ptr`线程安全性的回答
- 面试官的追问及回答
- 7.多线程使用shared_ptr如何保护数据安全
- 回答
- 面试官追问及回答
- 8.条件变量伪唤醒
- 对条件变量伪唤醒的回答
- 面试官的追问及回答
- 9.unique_ptr转移所有权
- 对`std::unique_ptr`所有权转移的回答
- 面试官的追问及回答
- 10.move实现方式
- 回答
- 示例代码
- 追问与答案
- 11.完美转发有什么用
- 完美转发的作用
- 面试官的追问及回答
- 12.模板的特化和偏特化
- 模板的特化和偏特化
- 回答
- 面试官追问
- 13.c++和c申请内存方式的区别
- C++和C申请内存方式的区别
- C语言中的动态内存申请
- C++中的动态内存申请
- 面试官追问及回答
- 14.c++释放数组和普通对象的区别
- C++释放数组和普通对象的区别
- 回答
- 面试官追问
- 15.动态多态虚表的位置在哪
- 动态多态虚表的位置
- 虚表的位置
- 示例说明
- 面试官的追问及回答
- 16.有序数组去重不用额外空间
- 回答
- 面试官追问
- 17.二叉树度为0和度为2的数量关系
- 二叉树中度为0(叶子节点)和度为2(满二叉节点)的数量关系
- 节点分类与数量关系
- 特殊情况
- 面试官的追问及回答
- 18.哈夫曼树构建过程
- 哈夫曼树构建过程
- 回答
- 面试官追问
- 19.快排最坏情况发生
- 19. 快排最坏情况发生
- 回答
- 面试官追问
- 20.递归算法对比循环的问题
- 递归算法对比循环的问题
- 递归算法的优势与局限
- 循环的优势与局限
- 面试官的追问及回答
- 21.优先队列的实现
- 21. 优先队列的实现
- 回答
- 面试官追问
- 22.有一个超大文件,无法一次性加载到内存,如何排序
- 超大文件的排序策略
- 步骤一:文件分割与排序
- 步骤二:多路归并
- 示例说明
- 面试官的追问及回答
- 23.B+树对比普通树,红黑树的区别,为什么不用B树
- B+树对比普通树、红黑树的区别,以及为何不用B树
- B+树与普通树的区别
- B+树与红黑树的区别
- 为何不用B树
- 面试官追问
- 24.HTTP 1/2/3版本的区别
- HTTP 1/2/3版本的区别
- HTTP/1.1
- HTTP/2
- HTTP/3
- 面试官追问及回答
- 25.HTTP Cookie作用
- HTTP Cookie作用
- 回答
- 面试官追问
- 26.TCP拥塞控制方法
- TCP拥塞控制方法
- 一、慢启动阶段
- 二、拥塞避免阶段
- 三、快重传阶段
- 四、快恢复阶段
- 面试官追问及回答
1.c++程序的内存分布
C++程序的内存分布
在C++程序中,内存分布通常分为几个主要部分,每个部分有特定的用途和特性。以下是详细的解释:
-
代码区(Text Segment/Code Segment):
- 用途:存储程序的机器指令,即编译后的二进制代码。
- 特性:通常是只读的,以防止程序意外修改自身指令。代码区在程序启动时被加载到内存,并且在程序运行期间保持不变。
-
数据区(Data Segment):
- 全局/静态数据区(Global/Static Data Segment):
- 用途:存储全局变量和静态变量(包括静态局部变量和全局静态变量)。
- 特性:在程序启动时被初始化,并在程序运行期间一直存在。
- 全局/静态数据区(Global/Static Data Segment):