存储类&作用域&生命周期&链接属性
来源:互联网 发布:哪个品牌的网络电视好 编辑:程序博客网 时间:2024/06/05 04:37
《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
(1).
存储类,
变量存储在哪一种内存中,比如栈,堆,数据段,bss段,text段,
作用域,
变量起作用的范围,
代码块作用域,可以理解为{}之间的空间,
生命周期,
链接属性,
源代码编译成.o目标文件,里面有很多分段,数据段,代码段等...
变量名、函数名靠符号和对应内存链接在一起,
链接属性:外链接属性,内链接属性,无链接属性,
(2).
代码段,
对应程序中的代码,又叫.text,
只读数据段,
程序运行期间只能读不能写,
数据段,
显示初始化为非0的static局部变量,显示初始化为非0的全局变量,
bss段,
显示初始化为0或未显示初始化的全局变量,显示初始化为0或未初始化的static局部变量,
堆,使用取决于程序员,
文件映射区,
进程将文件从硬盘读取到文件映射区,以后在内存操作文件,
栈,局部变量呆的地方,
内核映射区,
操作系统的内核程序映射到这个区域,
(3).
auto修饰局部变量,auto的局部变量其实就是默认定义的普通的局部变量,
static,
修饰全局变量,形成静态全局变量,
修饰局部变量,形成静态局部变量,
1、静态局部变量在存储类方面和全局变量一样,
2、静态局部变量在生命周期方面和全局变量一样,
3、静态局部变量和全局变量的区别是:作用域、连接属性。静态局部变量作用域是代码块作用域(和普通局部变量是一样的)、链接属性是无连接;全局变量作用域是文件作用域(和函数是一样的)、链接属性方面是外连接,
register,
(4).
extern,
声明全局变量,在a.c中声明后才能使用b.c中的变量,
volatile,能否被编译器优化,
适合用在,isr中的变量,多线程中共用的变量,硬件会更改的变量,因为编译器无法预知这些变量的改变,
restrict,
用于修饰指针,强调该指针指向的变量,不能被除了该指针以外的指针修改,
(5).
作用域,
代码块作用域是{}括起来的部分,不仅仅是函数定义的那个{},if等也有{},
全局变量,函数作用域是所在文件范围,就是整个.c文件中,
同名变量的掩蔽规则,
(6).
生命周期,
栈,
堆,
全局变量的生命周期是永久的,与程序运行同在,
代码段的生命周期是永久的,
只读数据段,目前可以把它和代码段一样看待,
(7).
完整C程序包括多个c文件多个h文件,
程序编译后得到的是独立的.o文件,需要进行链接将独立的二进制函数组成一个整体的可执行程序,
不声明就无法单个文件进行编译,
函数和全局变量是外链接属性,
内链接,就是不能被外链接,不能被当前c文件外面的其它文件进行访问,
无链接,局部变量,静态局部变量都属于无链接,这些变量的符号本身不参与链接,
函数和全局变量的同名冲突,谁叫它们是外链接属性呢,那怎么办?
有些语言的解决方案是“命名空间namespace”,
c语言中的解决方法是,将明显不会在其它c文件中引用的全局变量和函数声明为static,这样它们的链接属性就变为内部链接了,
这种要么是,要么不是的方法,肯定有很大的局限性,对于大型的项目,除了可以确定为内链接的,还有很多外链接的,还是有重名问题,因为大型项目文件实在太多,
(8).
指针,全局变量,容易破坏全局性,java这种面向对象语言就不提供了,或者说是封装了,
那指针、全局变量与面向对象矛盾吗?
总结:
- 存储类&作用域&生命周期&链接属性
- 存储类、作用域、生命周期、链接属性
- 存储类、作用域、生命周期、链接属性的笔记
- c语言的存储类&作用域&生命周期&链接属性
- 存储类、作用域、生命周期、链接属性的关系
- 存储类,作用域,生命周期和链接属性
- c语言总结之存储类\作用域\生命周期\链接属性(const)--1
- C语言专题精讲篇_4.7.存储类&作用域&生命周期&链接属性
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(下)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 嵌入式 Linux C语言(八)——存储类型、作用域、生命周期、链接属性
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 作用域、链接属性和存储类型
- HDU-1535-Invitation Cards(SPFA,邻接表)
- 【CI学习笔记】利用jquery中的ajax,调用接口,实现登录
- hdu1789 Doing Homework Again
- HTML学习笔记——标签<canvas>
- 如何搭建自己的个人博客网站
- 存储类&作用域&生命周期&链接属性
- Configure Apache HTTPd with Jakarta Tomcat Connector (mod_jk)
- Vijos P1988 自行车比赛
- hdu1224 dp动态规划+图论
- 关于Unity中Camera的Aspect
- linux中动态链接延迟绑定的实现
- HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)
- 文件的定位
- python 文档字符串 关键字参数 默认参数 传递函数和lambda函数