C之内存分类

C语言内存分为栈区、堆区、全局静态区、常量区和代码区。栈区用于存放函数内部的局部变量,堆区需手动管理,全局静态区存储全局变量和静态变量,常量区存放不可更改的常量,代码区则存储编译后的指令。通过例子探讨了字符串在不同区域的存储方式,包括指针承载、数组承载和static修饰的字符数组的内存表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C之内存分类

1.分类

c语言在内存划分中分为:栈区、堆区、全局静态区、常量区、代码区。

1.栈区:在函数内部定义的局部变量和局部数组,都在栈区。栈区的空间由系统管理,调用函数时开辟空间,函数执行结束空间回收。

2.堆区,空间由开发人员手动开辟,手动回收。通过malloc开辟,free释放

3.全局静态区:存放一些全局变量和静态变量。空间由系统管理,程序开始执行开辟空间,程序运行结束空间回收,在程序执行期间一直存在(和程序的生命周期一致)。

4.常量区:存放常量,不可更改,空间由系统管理,生命周期和程序的生命周期一致。比如:字符串

5.代码区:存放代码编译之后的CPU指令,告诉计算机如何来执行程序。

下面通过一段代码,更加形象的了解内存的分类

    #include <stdio.h>
    #include <stdlib.h>
    int a = 0;  // 全局初始化区
    char* p1;  //全局未初始化区
    int main(int argc, const char * argv[]) {
        int b;   //栈
        char s[] = "abc";  // 栈,因为是数组,所以“abc”以数组的形式存储在栈区
        char* p2;  // 栈
        char* p3 = "123456";   //123456在常量区,p3在栈上。
        static int c = 0;   //全局(静态)初始化区
        //分配得来得10和20字节的区域就在堆区。
        p1 = (char*)malloc(10);
        p2 = (char*)malloc(20);
        strcpy(p1,"123456");  // 123456\0放在常量区,编译器可能会将它与p3所指向的"123456" 优化成一个地方。
        return 0;
    }

2.字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值