美文网首页
变量,常量,静态变量存储的位置

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

作者: 北风知我意 | 来源:发表于2016-11-03 08:40 被阅读186次

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

发表于2013/10/12 21:34:03  12469人阅读

分类: 杂七杂八

常见的存储区域可分为:

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,而普通局部变量则不确定。

相关文章

  • [C/C++]C语言中字符串常量存储在哪里

    常量存储总结 局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区 1、局部变量存储在栈...

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

    变量,常量,静态变量存储的位置 发表于2013/10/12 21:34:03 12469人阅读 分类: 杂七杂八 ...

  • iOS内存管理

    内存五大区: 代码区:存放我们写的代码 常量区:存储常量字符串和const常量 静态区:存储全局变量和静态变量。在...

  • 变量的略知

    变量:全局变量、静态变量、局部变量、字符串常量、动态分配、静态分配 ---------------------根据...

  • static变量和普通变量区别

    静态变量属于类的变量,普通变量属于对象的变量。 静态变量存储在方法区(JDK7以上,静态变量存储在其对应的Clas...

  • Swift 中 class 和 struct 关于使用上面的异同

    相同点:可以声明静态的变量和常量,声明的同时必须进行初始化;可以声明实例变量和常量;可以声明存储属性也可以声明计算...

  • OC基础知识

    OC中内存分为五大区域 栈:存储局部变量和指针堆:创建对象BSS:存储未初始化的全局变量和静态变量数据段(常量区)...

  • Golang(二)基本语法

    变量与常量 什么是变量 变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。 声明变量 v...

  • C++11:构造函数及类的初始化

    C++11:初始化 C++11中成员变量的初始化主要包括三类变量: 普通成员变量 常量 静态变量 静态常量 普通成...

  • block对外部变量的管理之探索

    数据类型如下 局部变量 静态变量 全局变量 blcok变量 下面是code 局部变量 打印结果 静态常量 打印结果...

网友评论

      本文标题:变量,常量,静态变量存储的位置

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