C语言_堆和栈

//***** 堆栈 *****
void test1()
{
    int a = 100;  // a存放在栈中
    int *p = (int *)malloc(sizeof(int));  //p指向申请的堆的首地址
    // 栈
    /*
    栈 栈是一块连续的内存区域,这块区域的大小是固定的,是一个编译时就确定的常数,假如申请的内存空间超过栈的剩余空间,将会栈溢出
    栈的内存是连续的,不会产生内存碎片,因此栈中的数据执行速度很快
    */

    // 堆
    /*
    堆 堆是不连续的内存区域,各块区域由链表将它们串联起来,堆空间是由系统的虚拟内存申请而来,堆的空间比较大,堆由程序员自己申请空间
    由于堆的内存是不连续的,容易产生碎片,因此堆中的数据执行速度比较慢
    */
}

//***** 申请堆空间 *****
void test2()
{
    int *p = (int *)malloc(sizeof(int));  // 申请int类型大小的堆空间
    if(p == NULL)
    {
        printf("申请堆空间失败!");  // 由于是由虚拟内存空间申请而来,可能申请失败,所以判断下是否为空
    }
    else
    {
        *p = 100;
        printf("*p:%d\n",*p);
        free(p);  // 使用完堆空间后,一定要释放该指针指向的堆空间,要不然会出现内存泄露
        p = NULL;  // 释放掉该指针指向的堆空间后,一定要把该指针设置为空指针,要不然该指针就是迷途指针,也叫野指针
    }

    /*
    C语言使用malloc申请堆空间,使用相对应的free()释放申请的堆空间
    申请的堆空间只能使用指针操作,假如指向该堆空间的指针丢失了,那这块内存就像丢失了一样,这样的情况一直持续到程序运行结束,这种情况就叫内存泄露。
    注意:free()不能释放多次,要和malloc对应出现,不能说怕内存释放不彻底多释放几次,这样会造成程序崩溃
    */
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值