变量,常量,静态变量存储的位置

变量,常量,静态变量存储的位置常见的存储区域可分为:1、栈由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。2、堆由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,程序会一直占用内存,导致内存泄漏,在程序结束后,操作系统会自动回收。3、自由存储区由malloc等分配的内存

大家好,又见面了,我是你们的朋友全栈君。

常见的存储区域可分为:

1、栈

由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

2、堆

由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,程序会一直占用内存,导致内存泄漏,在程序结束后,操作系统会自动回收。

3、自由存储区

由malloc等分配的内存块,它和堆是十分相似的,不过它是用free来释放分配的内存。

4、全局/静态存储区

全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

5、常量存储区

这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)。


例1:C语言程序

int x;
void main()
{
}

变量x存储在内存哪个区域?

答:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。

BSS是英文Block Started by Symbol的简称。BSS段属于静态存储区


例2:static全局变量与普通全局变量有什么区别?

答:static全局变量和普通全局变量存储区域相同,不同的是:

static全局变量只在声明此static全局变量的文件中有效;

普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效。


例3:static局部变量与普通局部变量的区别?

答:static局部变量的存储区为静态存储区,普通局部变量的存储区为栈;

static局部变量生存周期为整个源程序,但是只能在声明其的函数中调用,并且其值与上一次的结果有关;而普通局部变量的生存周期为声明其函数的周期,超过特定的范围其值会被重新初始化;

static局部变量如果未初始化其值默认为0,而普通局部变量则不确定。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132134.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据降维_数据降维的目的

    数据降维_数据降维的目的数据降维分类+PCA(主成分分析降维)+相关系数降维PCA降维(不常用)实现思路+对数据进行标准化+计算出数据的相关系数矩阵(是方阵,维度是nxn,n是特征的数量)

    2022年8月2日
    5
  • java json decode 中文_PHP实现json_decode不转义中文的方法[通俗易懂]

    java json decode 中文_PHP实现json_decode不转义中文的方法[通俗易懂]本文实例讲述了PHP实现json_decode不转义中文的方法。分享给大家供大家参考,具体如下:默认情况下PHP的json_decode方法会把特殊字符进行转义,还会把中文转为Unicode编码形式。这使得数据库查看文本变得很麻烦。所以我们需要限制对于中文的转义。对于PHP5.4+版本,json_decode函数第二个参数,可以用来限制转义范围。要限制中文,使用JSON_UNESCAPED_U…

    2022年7月17日
    15
  • VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 “public: void __thiscall[通俗易懂]

    VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 “public: void __thiscall[通俗易懂]VC++常见错误原因解析之errorLNK2019:无法解析的外部符号"public:void__thiscall出现这个错误,应该首先查看“#include”语句是否包含,或者是否包含正确。符号无法解析意味着编译器知道有这个符号存在,也就是有声明,但在链接时,找不到实现代码,那么就去看看报错的这个函数有没有实现代码。如果它们的确已经有了,还是出现这个错误,就把它们重新编译一下。…

    2022年10月5日
    2
  • Vue学习笔记——Vue-router「建议收藏」

    Vue学习笔记——Vue-router「建议收藏」第1节:Vue-router入门1、解读router/index.js文件importVuefrom’vue’//引入VueimportRouterfrom’vue-router’//引入vue-routerimportHellofrom’@/components/Hello’//引入根目录下的Hello.vue组件Vue.use(Route…

    2022年7月11日
    20
  • 服务器版dll修复工具,dll修复工具「建议收藏」

    服务器版dll修复工具,dll修复工具「建议收藏」winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游戏手柄,缺少它可能造成部分软件无声音。当你的电脑提示“丢失winmm.dll”或者“没有找到winmm.dll”等类似错误信息。如果sqlite3.dll系统文件丢失、损坏,自行寻找选择适合系统的DLL系统文件,不但麻烦,还得冒着系统异常的风险。无主之地、荣誉勋章等游戏所需的physxcudart_20.Dll下载,解压后…

    2022年6月1日
    181
  • delphi FormatDateTime

    FormatDateTimeFunctionRichformattingofaTDateTimevariableintoastringSysUtilsunit1 function FormatDateTime(constFormatting:string;DateTime:TDateTime):stri

    2022年4月6日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号