详解C++内存的代码区,全局区,栈区和堆区

目录
  • 代码区:
  • 全局区:
  • 栈区
  • 堆区
  • 总结

今天无意中刷到了一篇关于c++内存的帖子,我发现那个人好像写的不太对,然后同时我自己也发现我对一块还不够了解,所以我干脆就自己去了解整理了一下:
首先我们要大概知道四个区都是干什么的

代码区:

顾名思义,就是存放我们写的代码的地方,不过要注意的是存放的是二进制代码。

注意:我们写的所有的写的代码(包括注释、变量、语句等)都会放到代码区中。

全局区:

存放全局,静态变量以及常量。

注意:

1.全局区里有一个部分叫常量区,储存的是常量,如const修饰的全局变量、字符串常量等

2.局部变量不放在全局区。

栈区

由编译器自动分配释放,存放函数的参数值、局部变量等。 这个没啥好注意的。

堆区

由程序员分配释放,若程序员不释放,程序结束时由操作系统回收。

注意在C++中主要利用malloc在堆区开辟内存,new在自由存储区开辟内存(堆和自由存储区好像没多大区别,自由储存区是c++基于new分配对的一个抽象概念)

相信大家看到可能会蒙了,这么多变量怎么分的清,下面就看段代码:

#include <iostream>
using namespace std;

int q = 20;               //全局变量

const int w = 60;    const修饰的全局变量

int main()
{
    int b = 40;   //  //创建局部变量

    static int e= 10;//    //静态局部变量 在普通变量前面加static,属于静态变量

    cout << "csdn yyds" << endl;   //字符串常量

    const int m= 10;   //const修饰的局部变量

}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

    内存分区模型 1 代码区 2 全局区 // 全局变量.静态变量.常量 #include <iostream> using namespace std; // 全局变量.静态变量.常量 //全局变量 int g_a=10; int g_b=10; //const修饰的全局常量 const int c_g_a = 10; const int c_g_b = 10; int main() { //创建普通局部变量 int a = 10; int b = 10; cout << "

  • 详解C/C++内存区域划分(简而易懂)

    C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名: 2. 内存堆区: 存放new或者malloc出来的对象: 3. 常数区: 存放局部变量或者全局变量的值: 4. 静态区: 用于存放全局变量或者静态变量: 5. 代码区:二进制代码. 知道如上一些内存分配机制,有助于我们理解指针的概念. C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放. C/C++内存区域

  • C++内存四区之代码区、全局区、栈区和堆区

    C++内存四区 C++ 在程序执行时,将内存大致分为代码区,全局区,栈区和堆区四个区域.不同的区域存储不同的数据,赋予不同的生命周期,能够更灵活地进行编程. 代码区:存放函数体的二进制代码,由操作系统管理创建,代码区时共享的,对于频繁被执行的程序,只需要存有一份代码即可: 全局区:存放全局变量和静态变量以及常量,在程序结束后由操作系统释放: 栈区:由编译其自动分配释放,存放函数的参数值以及局部变量等: 堆区:一般由程序员通过 new 开辟空间,进行分配和释放,若程序员不释放,则程序结束时由操作系

  • 详解C++内存的代码区,全局区,栈区和堆区

    目录 代码区: 全局区: 栈区 堆区 总结 今天无意中刷到了一篇关于c++内存的帖子,我发现那个人好像写的不太对,然后同时我自己也发现我对一块还不够了解,所以我干脆就自己去了解整理了一下:首先我们要大概知道四个区都是干什么的 代码区: 顾名思义,就是存放我们写的代码的地方,不过要注意的是存放的是二进制代码. 注意:我们写的所有的写的代码(包括注释.变量.语句等)都会放到代码区中. 全局区: 存放全局,静态变量以及常量. 注意: 1.全局区里有一个部分叫常量区,储存的是常量,如const修饰的全局

  • c语言详解动态内存分配及常见错误的解决

    目录 为什么会有动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的错误 对NULL指针的解引用操作 越界访问 对非动态内存进行free 使用free释放动态开辟内存的一部分 对同一块动态内存多次释放 对动态内存内存忘记释放(内存泄漏) 为什么会有动态内存分配 内存使用方式有两种 1.创建一个变量 2.创建一个数组 int a = 1; int arr[10]; 但是这两种方式都有一些特点 1.空间是固定大小的,不会变 2.必须提前知道要开辟多少空间,必

  • 详解Java内存泄露的示例代码

    在定位JVM性能问题时可能会遇到内存泄露导致JVM OutOfMemory的情况,在使用Tomcat容器时如果设置了reloadable="true"这个参数,在频繁热部署应用时也有可能会遇到内存溢出的情况.Tomcat的热部署原理是检测到WEB-INF/classes或者WEB-INF/lib目录下的文件发生了变更后会把应用先停止然后再启动,由于Tomcat默认给每个应用分配一个WebAppClassLoader,热替换的原理就是创建一个新的ClassLoader来加载类,由于JVM

  • 详解JAVA 内存管理

    前一段时间粗略看了一下<深入Java虚拟机 第二版>,可能是因为工作才一年的原因吧,看着十分的吃力.毕竟如果具体到细节的话,Java虚拟机涉及的内容太多了.可能再过一两年去看会合适一些吧. 不过看了一遍<深入Java虚拟机>再来理解Java内存管理会好很多.接下来一起学习下Java内存管理吧. 请注意上图的这个: 我们再来复习下进程与线程吧: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调

  • 详解Android内存泄露及优化方案一

    目录 一.常见的内存泄露应用场景? 1.单例的不恰当使用 2.静态变量导致内存泄露 3.非静态内部类导致内存泄露 4.未取消注册或回调导致内存泄露 5.定时器Timer 和 TimerTask 导致内存泄露 6.集合中的对象未清理造成内存泄露 7.资源未关闭或释放导致内存泄露 8.动画造成内存泄露 9.WebView 造成内存泄露 总结 一.常见的内存泄露应用场景? 1.单例的不恰当使用 单例是我们开发中最常见和使用最频繁的设计模式之一,所以如果使用不当就会导致内存泄露.因为单例的静态特性使得它

  • 详解Android内存泄露及优化方案

    目录 一.常见的内存泄露应用场景? 1.单例的不恰当使用 2.静态变量导致内存泄露 3.非静态内部类导致内存泄露 4.未取消注册或回调导致内存泄露 5.定时器Timer 和 TimerTask 导致内存泄露 6.集合中的对象未清理造成内存泄露 7.资源未关闭或释放导致内存泄露 8.动画造成内存泄露 9.WebView 造成内存泄露 总结 一.常见的内存泄露应用场景? 1.单例的不恰当使用 单例是我们开发中最常见和使用最频繁的设计模式之一,所以如果使用不当就会导致内存泄露.因为单例的静态特性使得它

  • 详解Java内存溢出的几种情况

    JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构. 1. 前言 JVM提供的内存管理机制和自动垃圾回收极大的解放了用户对于内存的管理,大部分情况下不会出现内存泄漏和内存溢出问题.但是基本不会出现并不等于不会出现,所以掌握Java内存模型原理和学会分析出现的内存溢出或内存泄漏,对于使用J

  • 详解SpringCloudGateway内存泄漏问题

    SpringCloudGateway内存泄漏问题 项目完善差不多,在进入压力测试阶段期间,发现了gateway有内存泄漏问题,问题发现的起因是,当时启动一台gateway,一台对应的下游应用服务,在压力测试期间,发现特别不稳定,并发量时高时低,而且会有施压机卡住的现象,然后找到容器对应的宿主机,并使用container stats命令观察内存,经过观察发现,压力测试时内存会暴涨,并由于超过限制最大内存导致容器挂掉(这里由于用的swarm所以会自动选择节点重启)最终发现由于之前测试服务器配置低,所

随机推荐