美文网首页
3.c++内存简介

3.c++内存简介

作者: celusing | 来源:发表于2020-11-26 00:38 被阅读0次

https://blog.csdn.net/czy47/article/details/90737468
https://blog.csdn.net/cherrydreamsover/article/details/81627855

一.内存管理

深度截图_选择区域_20201120094259.png
  1. 栈:
    由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。

  2. new分配的内存块,由程序控制其释放时机,一般一个new对应一个delete。如果程序没有释放,在程序结束后,操作系统会自动回收。
  3. 全局区/静态存储区
    全局变量和静态变量被分在同一块内存中,存放全局变量、静态变量。程序结束后,由系统释放。
    c++不再区分:已初始化全局区(data)和未初始化全局区(bss)。他们共同占有同一块内存区。
  4. 常量存储区
    存放常量字符串,这是一块比较特殊的存储区,里面存放的是常量,不允许修改。
  5. 自由存储区
    malloc分配的内存块,和堆十分相似。不过使用free来结束自己的生命。
  6. 代码区
    存放函数体(类成员函数和全局区)的二进制代码。

二.静态全局变量、全局变量、静态局部变量、局部变量的区别

  1. 全局变量、静态全局变量
    全局变量之前加上static,就变成静态全局变量。区别:
  • 全局变量属于常量区,静态全局变量自然也属于常量区;
  • 非静态全局变量的作用域:整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的;而静态全局变量则限制其作用域,即只在定义该变量的源文件内有效,统一源程序的其他源文件中不能使用它。
  • 由于静态全局变量的作用域,局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
  1. 局部变量、静态局部变量
  • 静态局部变量是属于常量区,而函数内部的局部变量是属于栈区;
  • 静态局部变量的销毁时机是程序结束,但是别的函数调用不了该变量,局部变量随该函数结束而结束。
  • 如果定义这两个变量时没有初始值时,静态局部变量会自动初始化位0,而局部变量是一个随机值。
  • 静态局部变量再编译期间只赋值一次,以后每次函数调用时,都不再赋值。局部变量再调用期间,每调用一次,赋值一次。

3.普通函数、静态函数

  • static函数和普通函数的作用域不同。static函数的作用域仅在本文件,只在当前源文件中使用的函数应该声明位内部函数(static),内部函数应该再当前源文件中说明和定义。
  • 对于可在当前源文件外使用的其他函数,应该在一个头文件中声明。要使用这些函数的源文件包含这个头文件。

总结:
局部变量改成静态局部变量后,改变了其存储方式。即改变了其声明周期;把全局变量改成静态全局变量,改变了其作用域,限制了其使用范围。

  • static全局变量和普通全局变量的区别:static全局变量只初始化一次,防止再其他文件单元中被引用。
  • static局部变量和普通变量的区别:static局部变量只被初始化一次,下一次依据上一次的结果值。
  • static函数和普通函数的区别:static函数在内存中只有一份,普通函数再每个被调用中维持一份复制品。

相关文章

  • 3.c++内存简介

    https://blog.csdn.net/czy47/article/details/90737468[http...

  • 11.2-1 Bitmap2 OOM

    简介 Out Of Memory(内存溢出):占用内存超出系统分配内存; memory leak(内存泄漏):占用...

  • 内存结构简介

    Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特...

  • 内存管理简介

    1.内存管理的重要性 移动设备的内存极其有限,每个app所能占用的内存是有限制的 下列行为都会增加一个app的内存...

  • 学习计划-待学习

    1.Tensorflow C++部署 2.Cmake 3.C++学习 4.GBDT 5.tSNE

  • extern const static

    内存分区简介 | 内存分区 | 保存内容 | 是否可读写 | 是否手动释放 ...

  • JUC(一)JMM内存模型

    一、简介 JMM((Java Memory Model)是Java内存模型,与JVM内存模型不同,与CPU内存模型...

  • JAVA并发:深入理解volatile的实现原理

    一、JAVA内存模型简介(JMM) 1.1、JMM定义 Java内存模型(Java Memory Model) 就...

  • 有了这款可视化工具,Java 应用性能调优 so easy。。。

    JVisualVM 简介 案例分析 准备模拟内存泄漏样例 使用JVisualVM分析内存泄漏 JVisualVM ...

  • 3.初识内存

    内存 简介 内存:单元是字节,每个字节存储8bit 每个单元给予编号:00000000~FFFFFFFF 内存单元...

网友评论

      本文标题:3.c++内存简介

      本文链接:https://www.haomeiwen.com/subject/ysxdiktx.html