内存中的五大区域:
1:栈:专门用来存储局部变量,多有的局部变量都是声明在内存中栈区域;
2:堆:堆是一个特别的区域,它可以允许程序员手动申请空间来使用;而在堆区域申请的空间是由低字节向高字节分配的,每次申请的字节都是从0开始的,这些字节一定是连续的,但不一定的紧挨着的,在申请的字节中里面如果是有值的,也是垃圾值,它是不会自动清零的;在向堆区域申请空间的时候有的时候也可能是失败的,因为有可能它的空间已经被申请满了,这时候返回指针的时候是一个NULL值;在堆区域申请空间的时候会涉及到三个函数(这几个函数的声明是放在stdlib.h的系统头文件下):malloc,calloc,realloc;前两个都是向堆区域申请空间,作用相同但calloc会在申请完之后,系统会将字节全部清空,所以建议使用后者;realloc的作用是扩容,也就是表示如果我们申请的空间不够用的时候可以使用这个函数将其扩容,如果申请扩容的时候还有空间的话就会接着你之前的空间字节后声明,但如果原来空间后面有剩余空间但剩下的空间不足够扩容的,就会重新找一块空间申请,将其原来的数据拷贝过来,原来的空间则会被释放;还有最重要的一点就是申请空间完毕后一定要记得释放,释放申请的堆空间:free(指针);但如果你没做释放的话,那么只有当程序结束的时候被申请的空间才会被释放;
3:BSS段:用来存储未初始化的全局变量和静态变量,如果我们声明一个全局变量没有为其初始化那么就会存储在内存中BSS段中,还有就是在程序运行最开始的时候这个全局变量没有被初始化也存储在BSS段;
4:数据段/常量区:用来存储已经初始化的全局变量,静态变量,还有常量数据;
5:代码段:用来存储代码/指令的区域;
|
|