`

C/C++中内存模型

 
阅读更多

      一直以来,C++中内存模型和Java内存模型结构就是困扰我的大问题,这在面试中也经常考到。经过长期卓绝地学习,终于得到下面这个最终解决方案:)

 

     C++内存分为5个区域(堆栈全常代 ):

 

1. 堆 heap

                   由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete)。如果程序员没有释放掉,在程序结束时OS会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”

 

2. 栈 stack

                   是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数。

                   存放在栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据也就自动释放了。

 

3. 全局/静态存储区 (.bss段和.data段) :

                   全局和静态变量被分配到同一块内存中。在C语言中,未初始化的放在.bss段中,初始化的放在.data段中;在C++里则不区分了。

 

4. 常量存储区 (.rodata段) :

                   存放常量,不允许修改(通过非正当手段也可以修改)

 

5. 代码区 (.text段) :

                   存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)

 

 

参考文献:

1. <系统程序员成长计划> P22~

2. C++堆、栈、全局/静态存储区、常量存储区http://www.cnitblog.com/guopingleee/archive/2009/02/16/54601.html

3. <程序员的自我修养> P61~   3.3 挖掘SimpleSection.o,但是这里是介绍的ELF格式目标文件结构(即文件在磁盘上的存储结构),和“内存中的结构”还是有区别的,注意区分

 

分享到:
评论

相关推荐

    深入理解C11C++11内存模型.doc

    现代计算机体系结构上,CPU执行指令的速度远远大于CPU访问内存的速度,于是引入Cache机制来加速内存访问速度。除了Cache以外,分支预测和指令预取也在很大程度上提升了CPU的执行速度。

    基于C/C++/Python的计算机视觉模型,实现目标检测、跟踪、人脸识别、手势、情绪和姿势识别

    基于C/C++/Python的计算机视觉模型,使用OpenPose、OpenCV、DLIB、Keras和Tensorflow库。目标检测、跟踪、人脸识别、手势、情绪和姿势识别 C/C++/Python based computer DLIB:计算机视觉和其他机器学习的现代C++...

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    在嵌入式设备上从C ++应用程序运行Keras模型-C/C++开发

    pocket-tensor pocket-tensor是arquolo的Kerasify分支,设计用于在嵌入式设备上运行C ++应用程序中经过训练的Keras模型。 设计目标与Keras口袋张量生成的顺序网络的兼容性口袋张量是arquolo的Kerasify分支,旨在在...

    掌握C++基础知识,c++特性、内存模型、编译过程等

    c 掌握C++基础知识,c++特性、内存模型、编译过程等

    C++开源程序库 C++开源程序库

    目前越来越受欢迎、并且得到越来越多证实的做法,是将Lua嵌入到C/C++程序中,而用Lua程序作为配置脚本。这种做法的优势是,Lua语言强大灵活,可以适应复杂的配置要求。同时,Lua便于嵌入C/C++程序,而且编译执行速度...

    C++教程网《Linux网络编程》视频百度云地址

    消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列...

    C/C++之回调函数

    讨论下C/C++中的回调函数。  在理解“回调函数”之前,首先讨论下函数指针的概念。  函数指针  (1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中...

    Go语言的内存模型及堆的分配管理

    Go这门语言抛弃了C/C++中的开发者管理内存的方式,实现了主动申请与主动释放管理,增加了逃逸分析和GC,将开发者从内存管理中释放出来,让开发者有更多的精力去关注软件设计,而不是底层的内存问题。这是Go语言成为...

    用于C单元测试的微小且幼稚的内存分配器-C/C++开发

    Tiny是一种小型且可移植的内存分配器。 它允许单元测试在运行时控制和查询分配器。 Tiny:可测试的C内存分配...特点体积小巧,不打扰整个用户区可增强可移植性灵活的内存模型甚至可以在堆栈上分配可以覆盖标准库的实现

    这是一个c++进阶编程的文档

    这是一个c++进阶编程的文档,包含了实现stl容器,C++的内存管理,深度探索c++对象模型,ACE网络编程,UNIX网络编程,多线程编程,模板的扩展使用,c专家编程,C的缺陷和漏洞.zip这是一个c++进阶编程的文档,包含了...

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    2.Windows_编程模型.mp4 20MFC_客户区鼠标消息.mp4 21.MFC_TicTac-1.mp4 22.MFC_TicTac-2.mp4 23.MFC_TicTac-3.mp4 24.MFC_鼠标滚轮.mp4 25.MFC_捕获鼠标.mp4 26.MFC_VisualKB-1.mp4 27.MFC_VisualKB-2.mp4...

    Java内存模型1

    显式内存模型的好处显式内存模型的好处像 C 和 C++ 这些语言就没有显示的内存模型 —— 但 C 语言程序继承了执行程序处理器的内存模型(尽管一个给定体系结构

    开源xml解析库TingXml。

    目前,对xml的使用非常广泛,读取和设置xml配置文件是我们最常用的操作。常见C/C++ XML解析器有Tinyxml、XERCES、...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    解析C语言与C++的编译模型

    首先简要介绍一下C的编译模型: 限于当时的硬件条件,C编译器不能够在内存里一次性地装载所有程序代码,而需要将代码分为多个源文件,并且分别编译。并且由于内存限制,编译器本身也不能太大,因此需要分为多个可...

    传智播客C++课件

    2.C++内存模型,命名空间和数据类型; 3.C++函数,引用,内联函数,函数模板,函数重载; 4.面向对象编程(OOP),类和对象; 5.构造器,拷贝构造,析构,new/delete; 6.运算符重载;面向对象编程(OOP),封装; 7.面向对象...

    OpenAI的Whisper模型

    无依赖关系的纯C/C++实现 Apple Silicon一流公民-通过ARM NEON、Accelerate框架、Metal和Core ML进行优化 对x86体系结构的AVX内部支持 对POWER体系结构的VSX内部支持 F16/F32混合精度 支持4位和5位整数量化 ...

    c++对象模型

    c++对象模型,详细解析编译器对c++的OO结构在内存中的处理和排布机制

    梯度提升决策树。-C/C++开发

    梯度提升决策树算法(GBDT)作者:江尘([受电子邮件保护...它具有高效,低内存占用,丢失功能的集合以及内置机制来处理分类功能和缺失值的功能。 GBDT什么时候对您有利? 您正在寻找的不仅仅是线性模型。 梯度提升决策

    针对C ++ 17的Chase-Lev免锁窃取工作双端队列的快速,通用实现-C/C++开发

    : Deque一种无边缘的无锁定单生产者多端”中介绍的消费者,Chase-Lev的工作窃取双端队列,如“动态循环工作窃取双端队列”论文中所述,并在后续论文“针对弱内存模型的正确有效的工作窃取”中得到了进一步改进。...

Global site tag (gtag.js) - Google Analytics