美文网首页
C++程序在内存中的分布

C++程序在内存中的分布

作者: 匿名client | 来源:发表于2019-04-13 20:32 被阅读0次

C++程序在内存中分布在五个区域:

(1)栈(Stack):局部变量,函数参数等存储在该区,由编译器自动分配和释放.栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储栈的地址,效率很高,内存空间是连续的,但栈的内存空间有限。

(2)堆(Heap):需要程序员手动分配和释放(malloc,free),属于动态分配方式。内存空间几乎没有限制,内存空间不连续,因此会产生内存碎片。操作系统有一个记录空间内存的链表,当收到内存申请时遍历链表,找到第一个空间大于申请空间的堆节点,将该节点分配给程序,并将该节点从链表中删除。一般,系统会在该内存空间的首地址处记录本次分配的内存大小,用于free释放该内存空间。

(3)全局/静态存储区:全局变量,静态变量分配到该区,到程序结束时自动释放,包括DATA段(全局初始化段)与BBS段(全局未初始化段)。其中,初始化的全局变量和静态变量存放在DATA段,未初始化的全局变量和静态变量存放在BBS段。BBS段特点:在程序执行前BBS段自动清零,所以未初始化的全局变量和静态变量在程序执行前已经成为0.

(4)文字常量区:存放常量,而且不允许修改。程序结束后由系统释放。

(5)程序代码区:存放程序的二进制代码

【补】什么是全局变量?什么是静态变量?

程序中变量的使用范围——作用域(Scope),就是变量的有效范围。变量的作用域取决于变量的访问性。

1. 局部变量:函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。

(1)主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。

(2)允许在不同的函数中使用相同的变量名,他们代表不同变量,分配不同的存放单元,互不相干,不会发生混淆。

(3)复合语句中定义的变量,只限于使用当前函数中,也是复合语句的局部变量,复合语句:就是用{}包含起来的语句块。

(4)形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。

2.全局变量:在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括.c 和 .h 文件。它的作用域是从声明时刻开始,到程序结束。

(1)全局变量定义必须在所有函数之外。

(2)全局变量可加强函数模块之间的数据联系,但是函数又依赖这些变量,降低函数的独立性。

(3)在同一源文件中,允许全局变量和局部变量同名,在局部变量作用域内,同名的全局变量不起作用。

相关文章

  • 程序在内存中的分布

    C语言程序在内存中的分布 代码示例: C++程序在内存中的分布: 代码示例: 以上内容参考以下几篇文章: http...

  • C++程序在内存中的分布

    C++程序在内存中分布在五个区域: (1)栈(Stack):局部变量,函数参数等存储在该区,由编译器自动分配和释放...

  • C++----动态内存

    C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程...

  • C/C++内存相关

    1. C/C++语言内存分布 一个C/C++编译的程序所占用的系统内存一般分为以下几个部分的内容: 1) 字符起始...

  • android 源码阅读的C++语法准备6 动态内存 信号处理

    动态内存 C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的...

  • 1.3.03_C++ 动态内存

    了解动态内存在 C++ 中是如何工作的是成为一名合格的 C++ 程序员必不可少的。C++ 程序中的内存分为两个部分...

  • C++

    排序算法总结 对十二种排序算法进行总结C++ 类内存分布 这里不妨说下 C++ 内存分布结构,我们来看看编译器是怎...

  • Java内存泄漏

    本文将会介绍: C++中的内存泄露 Java内存管理与垃圾回收 Java中的内存泄漏 一、C++中的内存泄露 在大...

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • CommonAPI 介绍

    CommonAPI CommonAPI C++是用于开发分布式应用程序的标准C++ API规范,该分布式应用程序通...

网友评论

      本文标题:C++程序在内存中的分布

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