堆、栈、段

一、堆

大块内存:堆内存的总容量很大,各个进程按需申请,使用完成后手动释放;

手动申请、释放: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不会被修改,实际上还是放在数据段;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章