笔记5:程序中获取内存的方法

程序中获取内存的方法

内存分配:栈,堆,数据段

一.栈内存:

反复使用:栈内存在程序中其实就是那一块空间,程序反复使用这一块空间。

临时性:函数不能返回函数局部变量的地址,因为函数执行完返回后这个局部变量已经不在了
这个局部变量是分配在栈上的,虽然不在了但是栈内存还在还可以访问,但是访问实际上这个内存地址已经和当时那个变量无关了。

二.堆内存:

操作系统堆管理器管理;堆管理器是操作系统的一个模块,堆管理内存分配灵活,按需分配
malloc之后,free之前,malloc返回的指针和内存相绑定,该指针是那段内存在当前进程的唯一联系人
如果指针在free之前就弄丢了,那么这段内存就永远丢了。

free告诉堆管理器这段内存我用完了你可以回收了。堆管理器回收了这段内存后这段内存当前进程就不该再使用了。因为释放后堆管理器就可能把这段内存再次分配给别的进程,所以你不能再用了。

三.代码段、数据段、bss段

3.1.1
编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分。
3.1.2
代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆叠组成的。
数据段(数据区,静态数据区):数据段就是程序中的数据,直观理解就是c语言中的全局变量
(注意:全局变量才算是程序的数据,局部变量不算程序的数据,只能算是函数的数据)
bss段(ZT(zero initial)):bss段的特点就是被初始化为0,bss段本质上也属于数据段,bss段就是被初始化为0的数据段。

注意区分:数据段和bss段的区别和联系:二者本来没有区别,都是用来存放C程序中的全局变量。区别在于把显示初始化为非零的全局变量存在数据段中,而把显式初始化为0或者并未显式初始化(C语言规定未显示初始化的全局变量值默认为0)的全局变量存在bss段

注意:
有些特殊数据会被放到常量区
3.1.3
C语言中使用char *p = “linux”;
定义字符串时,字符串”linux”实际被分配在常量区(老朱说是代码段),也就是说这个”linux”是常量字符串而不是变量字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值