精华内容
下载资源
问答
  • C语言中全局变量存放在哪个位置?
    千次阅读
    2020-06-04 10:04:12

    全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。
    栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
    堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
    自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
    全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。
    常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

    更多相关内容
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有...
  • 3、全局(静态)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量一块区域(.data),未初始化的全局变量和未初始化的静态变量相邻的另一块区域(.bss)。 – 程序结束后由系统...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 讨论函数的形参变量时曾经提到,形参变量只被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...

    C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)

    1----局部变量和全局变量
    在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。

    1.1 局部变量
    局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
    关于局部变量的作用域还要说明以下几点:

    1. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
    2. 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
    3. 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的。
    4. 在复合语句中也可定义变量,其作用域只在复合语句范围内。

    1.2 全局变量
    全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

    2. 变量的存储类别
    2.1 动态存储方式与静态动态存储方式
    前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。
    从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。

    • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
    • 动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。

    用户存储空间可以分为三个部分:

    1. 程序区;
    2. 静态存储区;
    3. 动态存储区;

    全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

    动态存储区存放以下数据:

    1. 函数形式参数;
    2. 自动变量(未加static声明的局部变量);
    3. 函数调用实的现场保护和返回地址;

    对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
    在c语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。

    2.2 auto变量
    函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。

    a是形参,b,c是自动变量,对c赋初值3。执行完f函数后,自动释放a,b,c所占的存储单元。
    关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

    2.3 用static声明局部变量
    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

    对静态局部变量的说明:
    1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
    2)静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

    2.4 register变量
    为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

    说明:

    1. 只有局部自动变量和形式参数可以作为寄存器变量;
    2. 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
    3. 局部静态变量不能定义为寄存器变量。

    2.5 用extern声明外部变量
    外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

    说明:在本程序文件的最后1行定义了外部变量A,B,但由于外部变量定义的位置在函数main之后,因此本来在main函数中不能引用外部变量A,B。现在我们在main函数中用extern对A和B进行“外部变量声明”,就可以从“声明”处起,合法地使用该外部变量A和B。

    展开全文
  • 除$_GET,$_POST,$_SERVER,$_COOKIE等之外的超全局变量保存在$GLOBALS数组中。注意,不要误写成$_GLOBALS。有点受到$_POST的影响了。 $GLOBAL是一个特殊的php自定义的数组。超级全局变量。跟$_SERVER一样,都属于超
  • 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个...
  • c语言中const全局变量存储在只读数据段,编译期最初将其保存在符号表中(const全局有的编译器直接当立即数存在ROM中),第一次使用时为其分配内存,程序结束时释放。 而const局部变量(局部变量就是函数中定义的...

    const修饰的变量的存储位置

    c语言中const全局变量存储在只读数据段,编译期最初将其保存在符号表中(const全局有的编译器直接当立即数存在ROM中),第一次使用时为其分配内存,在程序结束时释放。

    而const局部变量(局部变量就是在函数中定义的一个const变量,)存储在栈中,代码块结束时释放。

    在c语言中可以通过指针对const局部变量进行修改,而不可以对const全局变量进行修改。因为const全局变量是存储在只读数据段

    而c++中,一个const不是必需创建内存空间,而在c中,一个const总是需要一块内存空间。

    在c++中是否要为const全局变量分配内存空间,取决于这个const变量的用途,如果是充当着一个值替换(即就是将一个变量名替换为一个值),那么就不分配内存空间,不过当对这个const全局变量取地址或者使用extern时,会分配内存,存储在只读数据段。也是不能修改的。

    c++中对于局部的const变量要区别对待:

    对于基础数据类型,也就是const int a = 10这种,编译器会把它放到符号表中,不分配内存,当对其取地址时,会分配内存
    对于基础数据类型,如果用一个变量初始化const变量,如果const int a = b,那么也是会给a分配内存
    对于自定数据类型,比如类对象,那么也会分配内存。

    c中const默认为外部连接,c++中const默认为内部连接.当c语言两个文件中都有const int a的时候,编译器会报重定义的错误。而在c++中,则不会,因为c++中的const默认是内部连接的。如果想让c++中的const具有外部连接,必须显示声明为: extern const int a = 10。

    https://blog.csdn.net/qq_25814297/article/details/115567593?ops_request_misc=&request_id=&biz_id=102&utm_term=c%E8%AF%AD%E8%A8%80const%E4%BF%AE%E9%A5%B0%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E5%92%8C%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F%E5%AD%98%E6%94%BE%E5%9C%A8%E5%93%AA%E4%B8%AA%E5%8C%BA%E5%9F%9F&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-115567593.pc_search_result_control_group&spm=1018.2226.3001.4187

    实际案例----代码测试

    https://blog.csdn.net/u011594906/article/details/114173598?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163776572716780261929289%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163776572716780261929289&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-114173598.pc_search_result_control_group&utm_term=c%E8%AF%AD%E8%A8%80const%E4%BF%AE%E9%A5%B0%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E5%92%8C%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F&spm=1018.2226.3001.4187

    展开全文
  • 本文档的主要内容详细介绍的是LABVIEW初级教程之局部变量与全局变量的详细资料说明 ...全局变量将数据存储在特殊的通过多个VI可以访问的仓库中。不管变量将数据存储在何处,所有的变量都可以不使用连线连接两个地
  • Spring MVC配置Freemarker全局变量,实现应用全路径
  • C语言中如何使用全局变量简单示例,多文件.c中如何使用全局变量 关注“M2嵌入式”公众号,回复资源免费下载
  • 主要介绍了微信小程序定义和调用全局变量globalData的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Java全局变量存放哪里?

    千次阅读 2021-02-12 18:46:20
    其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放方法中的。e)方法与堆一样,是被线程共享的区域。方法中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、...

    197a3632e633

    我们说 常量,静态变量存放在方法区中,方法中的临时变量,存放到Java 虚拟栈中。有人问,那全局变量*(对象)存放在哪里. 其实全局变量

    就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区

    与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

    在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用。

    在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,  对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中,比如String的intern方法。

    下面我们通过一个例子来看是否是这样的。public class TestClass {

    private Class1 class1 =new Class1();

    private int m;

    public int intc(){

    int count =2;

    return m +1;

    }

    }

    public class Class1 {

    public Class1(){}

    }

    首先通过 javac 命令将TestClass

    展开全文
  • C语言内存中一共分为如下几个区域,分别是:1....全局变量、静态局部变量保存在全局数据,初始化的和未初始化的分别保存在一起;普通局部变量保存在堆栈中;全局变量和局部变量内存里的区别?一个由c/C++
  • C语言全局变量存放哪里?

    千次阅读 2021-05-19 15:42:02
    我们先看一下全局变量在反汇编中是怎么体现的,如示例示例代码CH07_3_4。#include#includeint i = 2;int main(void){int j = i;return 0;}1: #include2: #include3: int i = 2;4: int main(void)5: {...
  • 静态存储区全局变量

    千次阅读 2019-03-20 21:55:00
    静态变量存储在静态/静态全局区/静态存储,因为内存区域分5个:堆,栈,字符常量,静态,代码。 这个内存区域有什么特点?我们知道栈的特点是 :变量的申请与释放都是由操作系统帮我们管理的,...
  • miniprogram > app.js 文件中设置,globalData对象就是存储全局变量的。 App({ globalData: { hasLogin: false, openid: null }, onLaunch: function () { } }) 2.全局变量的使用 app.js文件中,直接使用...
  • 程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患<存于前台程序变量,可跟踪内存变量获得>。  本文主要论述将全局变量或常数...
  • 局部变量一:全局变量全局变量保存在内存的全局存储区中,占用静态的存储单元二:局部变量局部变量保存在栈中,只有所在函数被调用时才动态地为变量分配存储单元三:C语言经过编译之后将内存分为以下几个区域(1).....
  • 用户存储空间有三类 1.程序存储区 2.静态存储区全局变量与静态变量就这儿。 3.动态存储区,形参,子函数里的变量等这儿。
  • 静态变量存储在哪个区

    万次阅读 2019-06-26 22:40:35
    静态变量存储在__ A 全局区 B 堆 C 栈 D 常量 参考答案:A 知识点 内存到底分几个? 1、栈(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 2、堆(heap) — 一般由程序员...
  • C++中,内存可分为系统数据,自由存储区,文本,const数据全局静态,堆和栈
  • 全局变量存放哪里?

    千次阅读 2021-02-12 18:46:16
    如果一个JVM是用C/C++实现的,那么实现层里用到的“全局变量”就放在实现语言的全局变量存储的位置,跟Java/JVM自身没关系。题主说的“全局变量”多半实际想问的是Java层面的“静态变量”。下面再说。Java层面...
  • 文章目录一、存储区域介绍二、ubuntu系统中输出信息进行验证三、Keil中针对stm32系统进行验证四、总结五、参考资料 一、存储区域介绍 C语言内存中一共分为如下几个区域 区域 作用 内存栈 存放局部...
  • static全局变量:相当于全局变量,但只定义该变量的源文件内有效, 同一源程序的其它源文件中不能使用它,而extern全局变量可以。 static局部变量:只定义的函数体内有效,第一次定义时初始化,后续再次进入子...
  • 全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有所在函数被调用时才动态地为变量分配存储单元。该题目考查的知识点是变量的存储类型及性质。C语言经过编译之后将内存分为以下几...
  • 局部变量与全局变量及其存储方式

    千次阅读 2021-03-19 21:43:33
    全局变量全部存放静态存储区中,程序开始执行时给全局变量分配存储空间,程序执行完毕就释放。 动态存储区存放以下数据: ①函数形式参数。调用函数时给形参分配存储空间。 ②函数中定义的没有用关键字static...
  • 全局变量位置

    千次阅读 2020-07-25 19:59:05
    C语言中全局变量存放在哪个位置? 全局变量存放静态存储区,位置是固定的。 局部变量栈空间,栈地址是不固定的。 栈:就是那些由编译器需要的时候分配,不需要的时候自动清除的变量的存储区。里面的变量通常是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 693,009
精华内容 277,203
关键字:

全局变量存储在哪个区

友情链接: MessageCatDemo.zip