首先讲了内存与硬盘的区别:内存保存动态数据,断电就会丢失,存放的是运行的数据。而硬盘保存动态数据,断电不丢失,存放的是静态的数据。
接下来讲了进程虚拟地址空间,通过mmu(内存管理单元)把虚拟地址空间映射到物理内存。
划分空间的作用:各个数据之间互不影响;起到保护作用。
最高地址1个g空间划分给内核,剩下3个g位用户空间,用户空间分为栈空间,堆空间,数据区和代码段。栈空间里保存局部变量、函数形参、自动变量;堆空间里保存malloc、ralloc、calloc;数据区又分为bss(保存未初始化的全局变量)、or(only read)(保存常量)、静态数据区(static修饰变量,初始化的全局变量)。
栈空间的特点:先进后出,由系统管理。所在函数结束后释放。
堆空间的特点:用户管理,先进先出。
分配内存的三种方式:栈空间、堆空间、数据区。
全局变量和局部变量的区别:全局变量分配在数据区,未初始化,会默认初始为0;而局部变量分配在栈空间,未初始化,会给出随机垃圾值。
重名时,局部变量起作用。
声明和定义的区别:声明不需要分配内存空间,可以声明很多次;而定义需要分配内存空间,只可以定义一次。
格式化输入和输出
获取地址: %p
获取字符串:%s
获取无符号整型:%u
获取长整型:%ld
前面是其他类型,后面将是字符型时,中间加getchar(); 或者在格式串中加空格或“%*c”。