Linux 五大存储区

1. 程序代码区

程序代码区是用于存放程序执行代码的内存区域。这部分区域的大小在程序运行前就已经确定,它存储的是CPU执行的机器指令。程序代码区在程序启动时就被加载到内存中,且在整个程序运行期间都保持在内存中。

2. 文字常量区

文字常量区主要用于存放程序中的常量字符串。这些字符串在程序编译时就已经被分配好空间,并且在程序运行期间不会被改变。程序结束后,这些常量字符串所占用的内存由系统自动释放。形式如下:

const char* g_const_str = "hello, this is a constant string";

3. 静态存储区

静态存储区用于存放全局变量和静态变量。这些变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。静态存储区在程序启动时就被分配好空间,并且在整个程序运行期间都保持在内存中。程序结束后,这些变量所占用的内存由系统自动释放。形式如下:

int g_cnt = 10;
static int g_cnt = 10;

4. 栈区

栈区是用于存放函数的参数值和局部变量的值的内存区域。栈区的特点是先进后出,即最后一个被压入栈的元素会最先被弹出。栈区由系统自动分配和释放,程序员无需手动干预。形式如下:a,b,c就是存储在栈区。

void func()
{
    int a, b, c;
    ...
}

5. 堆区

堆区是用于存放进程运行中被动态分配的内存段的内存区域。堆区的大小并不固定,可以动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上。堆区的内存由程序员手动分配和回收,如果不加以管理,容易造成内存碎片化。形式如下:

void fun()
{
    char *p = (char *)malloc(1024);
    ...
    free(p);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值