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

变量,常量,静态变量存储的位置常见的存储区域可分为: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)
上一篇 2022年6月11日 上午10:46
下一篇 2022年6月11日 上午10:46


相关推荐

  • 最轻松mflac转flac、mp3方法

    最轻松mflac转flac、mp3方法直接拖入或者从文件夹选择文件 秒解 亲测好用 无网也可解传送门音乐解锁 移除已购音乐的加密保护 PS 目前支持网易云音乐 ncm 音乐 qmc mflac mgg 酷狗音乐 kgm 虾米音乐 xm 酷我音乐 kwm 等

    2026年3月19日
    2
  • 程序员:我终于知道post和get的区别

    程序员:我终于知道post和get的区别是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎

    2022年4月27日
    44
  • python和c++哪个好_python取消注释快捷键

    python和c++哪个好_python取消注释快捷键工欲善其事必先利其器,Python开发利器Pycharm常用快捷键以及配置如下,相信有了这些快捷键,你的开发会事半功倍一常用快捷键编辑类:Ctrl+D复制选定的区域或行Ctrl+Y删除选定的行Ctrl+Alt+L代码格式化Ctrl+Alt+O优化导入(去掉用不到的包导入)Ctrl+鼠标简介/进入代码定义Ctrl+/行注释、取消注释Ctrl+左方括…

    2022年8月27日
    9
  • python编程实现决策树算法

    python编程实现决策树算法最近布置了个课堂作业 用 python 实现决策树算法 整了几天勉勉强强画出了棵歪脖子树 记录一下 大体思路 1 创建决策树 My Decision Tree 类 类函数 init 初始化参数 fit 进行决策树模型训练 predict 进行预测 evaluate 进行模型评估 save model 保存模型 csv 格式 load model 加载模型 show tree 使用 Pillow 库绘制决策树以及其他一些封装的功能函数 2 最佳划分点的度量通常有 Gini 值 Entropy

    2026年3月16日
    3
  • C#MQTTNET服务端使用说明

    C#MQTTNET服务端使用说明C#MQTTNET服务端使用说明1.安装MQTTNet两种方式Shell可视化安装2.当前我的项目安装的依赖如下3.如何使用1.我想启动MQTT服务器,我该怎么做?2.我想知道MQTT服务器是否启动成功,我该怎么做?3.我想知道MQTT服务器是否停止允许,我该怎么做?4.我想知道有那些设备连接上了服务器,我该怎么做?5.我想知道有那些设备断开连接,我该怎么做?6.我想监听消息,我该怎么做?7.我想连接的客户端校验身份信息后才允许收发消息,我该怎么做?8.我想知道客户端订阅主题与取消订阅主题,我该怎么做?1.

    2022年6月25日
    317
  • Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]

    Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]今天再测试socket的时候,发现一个很奇怪的问题,就是客户端再connect的时候第一次connect总是会返回-1,errno是115,往往第二次连接就可以成功了。但是对于服务端来说,第一次连接已经成功返回了。后来想想可能跟自己的设置socket是非阻塞的有关系,后来吧socket设置成阻塞的,问题确实就没有了。后来有反复尝试了非阻塞的。我先把服务器关闭,让客户端连接,可以发现从打出来的e…

    2022年7月17日
    17

发表回复

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

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