段与堆栈

段与堆栈

定义:一个二进制文件的内容快。例如a.out

组成:文本段数据段BSS段

文本段:存放程序的运行指令
数据段:已经初始化全局变量或者静态变量
BSS段:未初始化的全局变量和静态变量

例如以下程序:

/*BSS段*/
char pear[40];
static double peach;
/*BSS段*/

/*数据段*/
int mango = 13;
static long melon =200;
/*数据段*/

mian()
{
	/*不进入文件之中,在运行时创建*/
	int i =3, j, *ip;
	/*不进入文件之中,在运行时创建*/
	/*文本段*/
	ip = malloc(sizeof(i));
	pear[5] = i;
	peach = 2.0 *mango;
	/*文本段*/
}

通过实验得到的结论:
数据段保存到目标文件中
BSS段不保存到文件之中
文本段会被编译器优化

段正在执行的程序之中是一块内存区域。

堆栈

以上阐述一些全局变量以及静态变量在在文件中的位置,局部变量由于不进入目标文件,在运行的时候存在于堆栈。在Linux中段是不断生长的,所以可以将其认为是无限大的。

堆栈的主要作用主要有三点:
1.为局部变量提供存储空间
2.记录函数调用的过程记录

由于每个函数名称就是一个地址,当调用一个函数的时候,程序在堆栈中可以创建以下的结构,函数调用完毕后会返回到指向之前结构的指针。

过程活动记录的数据结构
局部变量
参数
指向之前结构的指针
返回地址

3.暂时存储区
某些复杂的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值