美文网首页
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.内存分配

    内存:数据区 + 代码区 + 堆区 + 栈区 数据区:全局变量 静态变量 常量 (包括用const修饰的...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • docker 的资源分配

    内存分配 -m 或者--memory :分配内存--memory-swap:分配临时内存docker run -i...

  • Java中四种引用

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • Java编程语言:java中四种引用!欢迎补充

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • 回顾JVM内存分配

    回顾JVM内存分配回顾JVM内存分配

  • 探索iOS内存分配

    探索iOS内存分配 探索iOS内存分配

  • 内存管理:部分基础知识

    一、内存分区二、常用数据类型占用内存大小三、给对象分配内存 1、给结构体分配内存及内存对齐 2、内存分配完后,内存...

网友评论

      本文标题:9.内存分配

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