美文网首页
9.内存分配

9.内存分配

作者: 一漫116 | 来源:发表于2017-08-06 14:16 被阅读14次

    内存:数据区  +  代码区  +  堆区    +  栈区

    数据区:全局变量      静态变量      常量  (包括用const修饰的变量)

    代码区:存储普通代码

      栈区:局部变量,由系统分配

      堆区:手动给变量或对象分配的空间(malloc,calloc,recalloc,new)

    堆区(heap):  用于手动分配的空间,通常用malloc()/calloc()/realloc()/new()来实现动态分配内存,用free()/delete()来释放分配了的内存。

    栈区(stack):  给局部变量分配空间,从函数的开始分配,在函数的结束之前释放。这个是由系统自动完成的。

    数据区:全局变量(已初始化部分和未初始化部分)、静态局部变量(static类型的局部宾亮)。

    ⽂本区:代码段,存放⼆进制形式的指令(函数指令)。

    在堆区上手动分配内存:

    函数:void  *    malloc(字节)    是一个指针函数,申请成功,返回分配的内存的首地址,申请失败,返回NULL。默认是void  *数据类型。所以如果要使用这个返回值的话要进行强制类型转换。

    例:          char  *p  =  (char  *)malloc(100);//开辟100字节的临时分配域,函数值为其第1个字节的地址。

    void  *calloc(unsigned  n,unsigned  siza)    其作用是在内存的动态存储中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。

    例:p=calloc(50,4)//开辟50*4个字节的临时分配域,把起始地址赋给指针变量p.

    free(指针):  free函数负责释放在堆上面分配的空间,free(p)  释放指针p所指向的那段内存。

    free函数⽤于释放malloc申请到的空间,其参数必须是malloc的返回值。

    注意:

    1.free函数只能释放手动分配的内存,系统自动分配的内存不能由它释放。所以它里面的指针p,必须指向动态分配的内存

    2.free(p)    之后p指向的空间被释放,但是p的值还是存在的,为了防止误操作,在释放空间之后,给指针置空,即p=NULL;

    原则:谁开发谁保护,谁污染谁治理。

       

    相关文章

      网友评论

          本文标题:9.内存分配

          本文链接:https://www.haomeiwen.com/subject/lknglxtx.html