全局变量/静态全局变量/局部变量/静态局部变量
2013-03-12 10:40
225 查看
在介绍之前先讲讲内存的分布情况:
内存由代码区、全局数据区、堆区和栈区。其中堆区的数据由new或者是malloc所申请的内训所驻留的;栈区的数据是在执行函数内部的自动变量得来的;全局数据区的数据是全局变量和静态变量的,包括静态全局变量和静态局部变量;代码区存储的数据就是代码;
全局变量:
A、该变量在全局数据区分配内存。
B、全局变量就可以实现变量在文件中的共享
静态全局变量:
A、该变量在全局数据区分配内存。
B、初始化:如果不显式初始化,那么将被隐式初始化为0(自动变量是随机的,除非显式地初始化)。
C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。
D、文件作用域下声明的const的常量默认为static存储类型
E、静态全局变量不能被其它文件所用;
F、其它文件中可以定义相同名字的变量,不会发生冲突;
局部变量:
A、在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
静态局部变量:
A、静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
B、该变量在全局数据区分配内存。
C、初始化:如果不显式初始化,那么将被隐式初始化为0,以后的函数调用不再进行初始化。
D、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。
扩展:静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。其它文件中可以定义相同名字的函数,不会发生冲突;
内存由代码区、全局数据区、堆区和栈区。其中堆区的数据由new或者是malloc所申请的内训所驻留的;栈区的数据是在执行函数内部的自动变量得来的;全局数据区的数据是全局变量和静态变量的,包括静态全局变量和静态局部变量;代码区存储的数据就是代码;
全局变量:
A、该变量在全局数据区分配内存。
B、全局变量就可以实现变量在文件中的共享
静态全局变量:
A、该变量在全局数据区分配内存。
B、初始化:如果不显式初始化,那么将被隐式初始化为0(自动变量是随机的,除非显式地初始化)。
C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。
D、文件作用域下声明的const的常量默认为static存储类型
E、静态全局变量不能被其它文件所用;
F、其它文件中可以定义相同名字的变量,不会发生冲突;
局部变量:
A、在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
静态局部变量:
A、静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
B、该变量在全局数据区分配内存。
C、初始化:如果不显式初始化,那么将被隐式初始化为0,以后的函数调用不再进行初始化。
D、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。
扩展:静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。其它文件中可以定义相同名字的函数,不会发生冲突;
相关文章推荐
- 程序在的内存中的分配(常量,局部变量,全局变量,程序代码)(转)
- php 全局变量
- 定义C/C++全局变量/常量几种方法的区别
- C/C++定义全局变量/常量几种方法的区别
- 理运用命名空间让js不产生冲突避免全局变量的泛滥
- ADS中防止全局变量被优化
- _root定义的全局变量 在游戏嵌入页面的时候 无法访问此全局变量的解决方案
- 全局变量在多个c文件中公用的方法 extern
- PHP九大超全局变量
- solidworks2014方程式添加全局变量存在句法错误的解决方案
- 局部变量,全局变量?探寻程序上面的栈(STACK)空间的最大值!
- C 发现个全局变量与局部变量的区别
- 变量——全局变量为什么不允许定义在头文件中?有何危害?
- Lua学习之Chunks ,全局变量,命令行方式
- 基于JavaScript 声明全局变量的三种方式详解
- php函数相关(3):函数体中局部变量改变全局变量
- Android 全局变量
- 利用nodejs模块缓存机制创建“全局变量”
- Ajax - 在函数中使用Ajax怎么使用返回值 - Ajax赋值给全局变量异常的解决方法
- c++中的局部变量和全局变量重名时取值问题