C/C++自动变量和静态变量的初始化(这是笔记,不官方)
2014-01-08 15:56
281 查看
数组(向量)类似于标量的初始化方式取决于变量的存储方式。存储于自动存储空间的变量在main函数执行之前已经完成初始化,这个动作是有链接器完成的,不需要程序执行指令去对其进行初始化。而这个初始化的内容不管是数组还是普通变量初始化值均为0,在程序执行的之前这些内容和程序翻译出的指令一同被载入到内存。因此这些初始化是在程序执行之前完成的。
然而对于自动变量,因为自动变量存储于堆栈中,每一次进入到对应自动变量的作用域的时候其地址可能都不一样,如果自动变量没有初始化语句,此时自动变量是不会被初始化的,其值是不确定的。但是如果自动变量有初始化语句,则每次进入到相应的代码快的时候程序都会对其进行一次隐式的初始化,这会消耗时间和空间来执行。同理,如果这是一个数组,其初始化一样会被分多次执行。若数组很大这个执行消耗的资源是客观的。因此定义数据的时候需要考虑这一因素。尽量避免在初始化的地方浪费太多的资源。慎重考虑对数组的重复初始化是否值得,若否则应该将数组声明为静态,这样它可以在程序开始前只执行一次
然而对于自动变量,因为自动变量存储于堆栈中,每一次进入到对应自动变量的作用域的时候其地址可能都不一样,如果自动变量没有初始化语句,此时自动变量是不会被初始化的,其值是不确定的。但是如果自动变量有初始化语句,则每次进入到相应的代码快的时候程序都会对其进行一次隐式的初始化,这会消耗时间和空间来执行。同理,如果这是一个数组,其初始化一样会被分多次执行。若数组很大这个执行消耗的资源是客观的。因此定义数据的时候需要考虑这一因素。尽量避免在初始化的地方浪费太多的资源。慎重考虑对数组的重复初始化是否值得,若否则应该将数组声明为静态,这样它可以在程序开始前只执行一次
相关文章推荐
- java学习笔记4:对象的初始化顺序(官方实例)
- 3.4 初始化内存管理------《深入Linux内核架构》笔记
- Solr入门之官方文档6.0阅读笔记系列(五) 第二部分结束
- Swift学习笔记(六)——变量的默认初始化值的问题
- ARM学习笔记012之mini2440上电的启动和初始化程序分析(即Bootloader分析)
- 静态变量,与实例变量区别,实例属性初始化
- Unity-官方教程-SpaceShooter-个人开发笔记
- C++基础学习笔记----第十课(初始化列表、析构函数)
- Django Rest Framework--oauth实验笔记--参考官方文档
- nginx 源码学习笔记(二十)—— event 模块(一) ——初始化
- Directx9.0 a shader approach 学习笔记1---初始化D3D
- CS231n官方笔记授权翻译总集篇发布
- Java类的初始化顺序 (静态变量、静态初始化块、变量 )
- java成员的初始化 --thinking in java学习笔记(三)
- MySql官方手册学习笔记2 MySql的模糊查询和正则表达式
- 笔记:JAVA的静态变量、静态方法、静态类
- Jersey 2.22.2 官方文档第3章学习笔记
- Java学习笔记二:初始化(三)
- greenplum学习笔记_安装与初始化
- spring源码学习笔记-初始化(4)