`

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格式目标文件结构(即文件在磁盘上的存储结构),和“内存中的结构”还是有区别的,注意区分

 

分享到:
评论

相关推荐

    从缺陷中学习C/c++

    1. **深入理解C/C++特性**:熟悉语言的底层机制,如内存模型、指针操作、类型转换等,是避免陷阱的基础。 2. **代码审查与测试**:定期进行代码审查,利用静态分析工具检查潜在的缺陷,以及实施严格的单元测试和...

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

    【深入理解C11/C++11内存模型】 在现代计算机体系结构中,CPU的运算速度远超其访问内存的速度,这导致了访问延迟问题。为了解决这一问题,引入了Cache机制,Cache能缓存最近频繁访问的数据,显著提高了内存访问效率...

    移植 Facebook 的 LLaMA 模型到 C/C++

    在本文中,我们将探讨如何将Facebook的LLaMA模型移植到C/C++编程语言中,以便在不依赖Python或其他高级语言的情况下实现推理或训练。 首先,我们需要理解LLaMA模型的基本结构。它是基于Transformer架构的,包含自...

    c/c++完整视频教程(三)——–Linux服务器编程

    ### C/C++在Linux服务器编程中的应用 #### 一、Linux服务器编程基础 - **Linux环境搭建**:学习如何安装Linux操作系统,并熟悉其基本命令。这是进行服务器编程的前提。 - **编译器选择与配置**:介绍GCC等常用C/...

    嵌入式C/C++语言精华文章集锦.pdf

    在某些架构中,如8086/8088,C/C++区分了不同类型的指针,包括近指针、远指针和巨指针,以适应不同的内存模型。理解这些概念对于在特定硬件平台上的高效编程至关重要。 #### 11. 基于ARM的嵌入式Linux移植真实体验 ...

    Windows下的c/c++高级编程 源代码

    作者朱磊和周彬通过丰富的实践经验,详细介绍了如何利用C/C++语言在Windows环境中进行系统级编程、底层开发以及高效能应用的设计。这本书的源代码提供了读者实践学习的宝贵材料。 首先,我们要明白Windows平台下的C...

    C/C++深层探索

    此外,还将深入讲解指针的使用,这是C语言的一大特色,也是理解和使用C++内存模型的关键。 2. **C++扩展与面向对象编程**:C++在C的基础上引入了类、对象、封装、继承、多态等面向对象特性。这些概念的深入理解有助...

    在 C/C++ 中调用 Java

    注意,使用JNI需要对Java和C/C++的内存管理有深入理解,因为两者的内存模型和生命周期管理不同。同时,JNI函数调用需要处理线程安全问题,特别是当多个线程同时访问Java对象时。 总的来说,C/C++调用Java的核心在于...

    高质量编程C/C++(第三版)

    《高质量编程C/C++(第三版)》是针对C++和C语言编程的一本权威指南,旨在提升程序员的代码质量和专业素养。这本书不仅涵盖了编程的基本规范,还特别关注了在面试过程中可能会遇到的问题,帮助读者在技术面试中...

    windows via c/c++

    《Windows Via C/C++》是编程领域中一本深入探讨如何使用C/C++语言开发Windows应用程序的经典著作。本书针对Microsoft Windows操作系统,提供了详细的编程指南和技术解析,旨在帮助开发者掌握Windows API的核心概念...

    Windows via C/C++, Fifth Edition

    5. **C/C++语言基础**: 对于不熟悉C/C++的读者,书中有基础回顾,包括语法、内存管理、函数指针等,为深入Windows编程打下基础。 6. **多线程编程**: Windows支持多线程应用,书中会介绍如何创建和管理线程,同步...

    腾讯c/c++面试题

    从给定的文件信息中,我们可以提炼出一系列与C/C++相关的知识点,这些知识点涵盖了面试题目的设计、数据结构、算法、操作系统基础以及面试策略等多个方面。以下是对这些知识点的详细解析: ### C/C++基础知识 1. *...

    超强推荐C/C++基础教程{100部},

    C/C++语言是计算机科学中的两大重要编程语言,它们在软件开发领域有着广泛的应用,尤其在系统编程、游戏开发、高性能计算以及嵌入式系统等领域更是不可或缺。本教程集合了100部基础教程,旨在为初学者提供全面且深入...

    Viterbi算法c/c++实现

    在C/C++实现中,需要注意内存管理、效率优化以及错误处理。例如,使用适当的数据结构(如动态数组或链表)来存储状态和路径信息,避免不必要的内存分配和拷贝;使用向量化操作或者并行计算来加速更新和回溯过程;...

    C/C++笔试题集锦

    这份资料不仅包含了常见的C/C++编程题目,还深入探讨了语言的一些关键概念,如类型转换和对象模型,这对于理解和掌握这两种语言至关重要。 首先,我们来看C/C++的基础部分。C语言作为底层编程的重要工具,强调简洁...

    QT/C++实时获取CPU和内存的使用率

    QT/C++实时获取CPU和内存使用率是软件开发中一项重要的功能,特别是在系统监控或性能分析的应用场景下。QT框架提供了跨平台的能力,使得我们可以在Windows、macOS、Linux等不同操作系统上编写代码,而C++作为其底层...

    Matlab C/C++ Graphics Lib

    《Matlab C/C++ Graphics Lib》是一本专为开发者准备的指南,主要讲解如何使用C++或C语言与MATLAB的图形库进行交互。这本书详细介绍了如何利用MATLAB的图形库来创建、控制和定制高性能的图形应用。MATLAB作为一款...

    Memory Management--Algorithms and Implementation in C/C++

    ### 内存管理:算法与C/C++中的实现 #### 内容概览 《内存管理:算法与C/C++中的实现》是一本深入探讨内存管理机制、策略及其在C/C++编程语言中具体实现的专业书籍。作者Bill Blunden通过本书系统地介绍了内存管理...

    C/C++嵌入式编程

    C语言和C++语言是嵌入式开发中最常用的编程语言之一。它们之所以被广泛采用,主要是因为这两种语言提供了对底层硬件的直接访问能力,并且编译后的代码效率高,非常适合于资源受限的嵌入式环境。 - **C语言特点**: ...

Global site tag (gtag.js) - Google Analytics