计算机三大组成部分:CPU 内存 硬盘
内存与硬盘的区别:内存保存动态数据,断电就会丢失,存放的是运行的数据。而硬盘保存静态数据,断电不丢失,存放的是静态的数据。
内存是共享设备,是稀缺资源,操作系统用来管理资源,给每个进程抽象出4G虚拟地址空间,虚拟空间通过MMU映射到物理地址。
进程虚拟地址空间划分:最高地址1G是内核空间,剩下3G是用户空间。
用户空间分为栈空间,堆空间,数据区和代码段。
栈空间存放局部变量、函数形参、自动变量。
堆空间里存放malloc、ralloc、calloc。(函数)
数据区又划分为bss(未初始化的全局变量)、or(only read)(保存常量)、静态数据区(保 存static修饰的变量和初始化的全局变量)。
代码段存放代码。
划分空间的作用:让各个数据之间互不影响;起到保护数据作用。
栈空间的特点:先进后出,系统管理。
堆空间的特点:先进先出,用户管理。
分配内存的三种方式:栈空间、堆空间、数据区。
全局变量和局部变量的区别:
(1)全局变量存放在数据区,局部变量存放在栈空间。、
(2)局部变量的生命周期是所在函数结束后释放,全局变量的生命周期是整个程序结束后释放。
(3)局部变量未初始化,系统自动初始化为随机值;全局变量未初始化,系统自动初始化为0。
局部变量和全局变量重名时,局部变量起作用
栈空间变量会在函数结束后释放
声明和定义的区别:声明不需要分配内存空间,可以声明很多次;而定义需要分配内存空间,只可以定义一次。
格式化输入和输出
获取地址: %p
获取字符串: %s
获取无符号整型: %u
获取长整型: %ld
获取双精度浮点型: %lf
若前面是其他类型,后面是字符型时,中间加getchar(),或者在格式串中加空格或“%*c”。
课堂小知识
gcc -g到编译结束