在C语言中,进程可在内存中分别存入五大分区:
1、text:也称为代码段,其中主要用于存放二进制指令、常量、被const修饰过的初始化过的全 局变量、静态局部变量;该分区为只读权限,若强制修改将会产生段错误。
2、data:也称为数据段,其中主要用于存放初始化过的全局变量、静态局部变量。
3、bss:也称为静态数据段,主要用于存放未初始化过的全局变量、静态局部变量 。
Ps:该段内存在进程运行前自动清理为0
4、heap:也称为堆,该段主要由程序员手动管理,其存储空间足够大,但使用过程相对复杂。
5、stack:也称为栈,主要用于存放局部变量、块变量,由系统自动申请、释放内存,存储空间 相对较小,但使用过程更
以上提到了一些变量,下面引入变量的分类:
变量在分类时,主要按照存储位置、生命周期以及作用范围三个方面进行区分。
1、全局变量:即定义在函数外的变量,存储于数据段及静态数据段(data\bss);其生命周期由程序开始维持到程序结束;在整个程序任意位置均可调用。如下图定义,num定义于主函数main()之外,则num为一个全局变量。
#include<stdio.h>
int num = 10;
int main()
{
printf("%d",num);
}
2、局部变量:与全局变量想法,定义在函数内的变量为局部变量;存储于栈分区(stack);其生命周期仅由所在函数开始维持到所在函数结束;也仅可在所在函数内使用。如下图定义,flog定义于主函数main()内,则其为主函数内的一个局部变量,仅可在主函数内调用
#include<stdio.h>
int main()
{
int flog = 5;
flog++;
printf("%d\n",flog);
}
3、块变量:即定义在语句块内变量;存储于栈分区(stack);由本函数开始维持到到本函数结束;且仅可在语句块(if\for\while)内使用。如下图定义,近定义在for函数内的变量i则为一个块变量。
#include<stdio.h>
int main()
{
int x = 0;
for(int i=0; i<10; i++)
{
x += i;
}
printf("%d",x);
}
注意:局部变量会屏蔽同名的全局变量,块变量会屏蔽同名的局部变量和全局变量
为代码阅读方便,全局变量建议首字母大写,局部、块全部小写
本文介绍了C语言中进程在内存的五个分区:代码段(text)、数据段(data)、静态数据段(bss)、堆(heap)和栈(stack)。讨论了各分区的功能和变量类型,包括全局变量、局部变量和块变量的存储位置、生命周期和作用范围。
645

被折叠的 条评论
为什么被折叠?



