C语言_堆和栈

来源:互联网 发布:班班通教学软件 源码 编辑:程序博客网 时间:2024/05/16 01:30
//***** 堆栈 *****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 0
原创粉丝点击