C语言内存管理

1、栈区

        保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。

2、堆区

        由malloc系列函数或new操作符分配的内存。其生命周期有free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。

3、数据区

    ①bss区:(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。 比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。 在《Programming ground up》里对.bss的解释为:There is another section called the .bss. This section is like the data section, except that it doesn’t take up space in the executable.

    ②data区:保存初始化不为0的全局变量或者static修饰的变量

    ③rodata区:用于保存常量

4、代码区

        存放函数体的二进制代码

int a = 0;   //全局初始化区
char *p1;    //全局未初始化区

void main()
{
    int b;  //栈
    char s[] = "abc";   //s在栈上,abc在常量区
    char *p2;    //栈
    char *p3 = "123456";  //123456\0在常量区,p3在栈上

    static int c = 0;     //全局(静态)初始化区
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(10);    //分配的10和20字节的区域就在堆区

    strcpy(p1,"123456");        //123456\0存放在常量区,编译器可能会与p3所指的“123456”优化成一 
                                //个地方
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值