C++的内存管理是怎样的?

news/2025/2/13 0:48:18/

目录

  • C++的内存管理
    • 代码段
    • 数据段
    • BSS段
    • 堆区
    • 映射区
    • 栈区

C++的内存管理

在C++中,虚拟内存分为代码段、数据段、BSS段、堆区、文件映射区、栈区六部分:

代码段

包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。

数据段

存储程序中已初始化的全局变量和静态变量。

BSS段

BSS(Block Started by Symbol)段是C/C++编译器在程序加载和运行时使用的一种特殊内存段。

存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。

堆区

调用new、malloc函数时在堆区动态分配内存,同时需要调用delete、free来手动释放申请的内存。

映射区

映射区(Mapped Region)是指在程序运行时,将文件的一部分映射到进程的内存空间,使得进程可以直接访问文件内容而无需进行文件读写操作。这样可以提高文件访问的效率,并且方便对文件内容进行修改。

在Unix/Linux系统中,映射区通常使用mmap系统调用来实现。mmap函数将文件的一部分或整个文件映射到进程的虚拟地址空间中的一个区域。这个虚拟地址区域与实际的物理内存或磁盘文件相关联。

存储动态链接库以及调用mmap函数进行的文件映射

栈区

存储函数的返回地址、参数、局部变量、返回值


http://www.ppmy.cn/news/1084050.html

相关文章

日本橙皮书数据库—《医疗用医药品质量情报集》

日本橙皮书是一份关于医疗用医药品质量情报的汇总报告,由日本厚生劳动省发布。它主要涵盖了药品的品质再评价信息,特别是针对特定历史阶段的产品,笔者总结信息如下: ①日本橙皮书数据库包含了一系列药品的详细信息,如…

Spark_Spark比mapreduce快的原因

Spark 为什么比 mapreduce 快? 最重要的3点, 数据缓存 : 中间结果可以缓存在内存中复用 资源管理 :executor task 管理,不同stage的task可以运行在同一个executor上 任务调度 : dag 对比多阶段mr 1.任务模型的优化(DAG图对比…

已解决下载安装Python官网安装包下载速度慢问题

本文摘要:本文已解决下载安装Python官网安装包下载速度慢的问题。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究…

C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题

问题重现 定义了两个接口IA IB class IA{public:virtual void funA() = 0; }; class IB{public:virtual void funB() = 0; }

迭代器模式简介

概念: 迭代器模式是一种行为型设计模式,它提供了一种访问集合对象元素的方法,而无需暴露其内部表示。通过使用迭代器,可以按照特定顺序遍历集合中的元素。 特点: 将遍历和具体集合分离,使得能够独立地改…

近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展

如今,网络游戏采用免费游玩(Free to Play)加内购的比例要远大于买断制,这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户,选择把原来的买断制改为免费游玩,一个典型的例子就是最近的网易的…

卡特兰数和算法

在组合数学中,卡特兰数是一系列自然数,出现在各种组合计数问题中,通常涉及递归定义的对象。它们以比利时数学家尤金查尔斯卡特兰(Eugne Charles Catalan)的名字命名。 卡特兰数序列是1, 1, 2, 5, 14, 42......&#xf…

LNMP架构:搭建Discuz论坛

文章目录 1. 编译安装Nginx1.1 前置准备1.2 编译安装1.3 添加nginx系统服务 2.编译安装MySql2.1 前置准备2.2 编译安装2.3 修改mysql 配置文件2.4 设置路径环境变量2.5 初始化数据库2.6 添加musql系统服务2.7 修改MySql登录密码 3. 编译安装PHP3.1 前置准备3.2 编译安装3.3 复制…