一、堆
大块内存:堆内存的总容量很大,各个进程按需申请,使用完成后手动释放;
手动申请、释放:malloc申请、free释放;
脏内存:堆内存是反复使用,且不会清零;
临时性:只能在malloc和free之间访问;
使用方式:先申请绑定(使用malloc),然后校验是否申请成功(即校验返回值释放为NULL,为NULL则申请失败),使用完成后释放;
可能造成的问题:碎片问题、内存泄露;
二、栈
由编译器自动分配管理:自动管理,不需要手动干预;
反复使用:栈内存就是一块空间,程序反复使用;
栈的管理形式:先进先出;
脏内存:栈内存由于是反复使用的,每次使用后程序都不会去清理,因此保留原来的值;
三、段
分为:代码段、数据段、bss段;
代码段:程序中可执行的部分;
数据段:程序中的数据,C语言中的全局变量(局部变量只能算函数的数据);
bss段:被初始化为0 本质上也是属于数据段 是初始化为0的数据段;
有些数据会被放在代码段:
如:C语言中使用char* p=“linux”,实际上被分配在代码段,也就是“linux” 实际上是一个字符常量,相当于const char* p=“linux”;
const型常量:const定义常量 实现方式有两种:
1.使用const修饰的变量放入代码段实现不能修改;
2.由编译器检查确保const不会被修改,实际上还是放在数据段;