一些知识点记录
来源:互联网 发布:什么是涉密网络 编辑:程序博客网 时间:2024/06/01 18:38
局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式初始化,例如:
例如,全局变量pi这样初始化是合法的:
double pi = 3.14 + 0.0016;
但这样初始化是不合法的:
double pi = acos(-1.0);
局部变量这样初始化却是可以的。
程序开始运行时要用适当的值来初始化全局变量,所以初始值必须保存在编译生成的可执行文件中,因此初始值在编译时就要计算出来,然而上面第二种初始化的值必须在程序运行时调用acos函数才能得到,所以不能用来初始化全局变量。请注意区分编译时和运行时这两个概念。为了简化编译器的实现,C语言从语法上规定全局变量只能用常量表达式来初始化。
如果全局变量在定义时不初始化则初始值是0,如果局部变量在定义时不初始化则初始值是不确定的。
栈 (高内存地址) 空洞 堆
BSS段(未初始化数据段,用0填充) .data数据段
.text文本段 (低内存地址)
关于不同类型的变量在内存中的位置:
1. 全局变量 已初始化 位于.data数据段;未初始化 则位于.bss未初始化数
据段。
2. 静态(static)全局变量也在.data数据段。
3. 局部变量 在栈上。静态局部变量,并不是在调用函数时分配,在函数返
回时释放,而是像全局变量一样静态分配,在.data数据段,但它的作用域只在函数中起作用。
4. const修饰的全局变量在.rodata只读数据段(const变量在定义时必须初
始化,所以没有所谓的未初始化const变量),只读数据段在和.text同一个Segment.
例如,全局变量pi这样初始化是合法的:
double pi = 3.14 + 0.0016;
但这样初始化是不合法的:
double pi = acos(-1.0);
局部变量这样初始化却是可以的。
程序开始运行时要用适当的值来初始化全局变量,所以初始值必须保存在编译生成的可执行文件中,因此初始值在编译时就要计算出来,然而上面第二种初始化的值必须在程序运行时调用acos函数才能得到,所以不能用来初始化全局变量。请注意区分编译时和运行时这两个概念。为了简化编译器的实现,C语言从语法上规定全局变量只能用常量表达式来初始化。
如果全局变量在定义时不初始化则初始值是0,如果局部变量在定义时不初始化则初始值是不确定的。
栈 (高内存地址) 空洞 堆
BSS段(未初始化数据段,用0填充) .data数据段
.text文本段 (低内存地址)
关于不同类型的变量在内存中的位置:
1. 全局变量 已初始化 位于.data数据段;未初始化 则位于.bss未初始化数
据段。
2. 静态(static)全局变量也在.data数据段。
3. 局部变量 在栈上。静态局部变量,并不是在调用函数时分配,在函数返
回时释放,而是像全局变量一样静态分配,在.data数据段,但它的作用域只在函数中起作用。
4. const修饰的全局变量在.rodata只读数据段(const变量在定义时必须初
始化,所以没有所谓的未初始化const变量),只读数据段在和.text同一个Segment.
- 一些知识点记录
- 一些知识点,记录
- STL 一些知识点的记录
- 记录一些fragment的知识点
- 记录一些Tensorflow小知识点
- C#的一些基础知识点记录
- android开发一些小知识点记录
- 个人记录一些常用的知识点
- TextView的一些需要记录的知识点
- 写一些关于Android的知识点记录
- 记录神经网络中一些小知识点
- 学习oracle的一些知识点记录
- 记录一些学习到的零碎的知识点。
- 解读jquery源码时记录的一些知识点
- 黑马程序员----JavaSE一些常用基础知识点记录-学习日记
- 记录整理入门的JavaScript学习一些重要知识点
- 随笔,记录一下发现的一些小知识点
- Android开发中的一些小知识点记录(1-20)
- 用Latex表示矩阵
- exynos4412 架构
- C# 文件操作之创建文件夹
- 修改用户信息技术点拨
- 移位操作 二进制处理
- 一些知识点记录
- asp.net 后台alert不影响布局的方法
- 【VC编程技巧】文件☞2.4内存映像文件
- 关于js中单引号(')和双引号(")的使用以及转义的理解
- PHP的异常捕获
- 开发日志:使用struts2标签[<s:if><s:property>等]获取boolean属性需注意
- 黑马程序员——java第二十一、二十二天:IO流(二)
- QML基础——UI布局管理
- 黑马程序员 java基础加强_类加载器