更新: 2018/01/09 增加free()
更新: 2018/04/13 修改部分文字与表格背景色与默认颜色相同

//# TODO: malloc, alloc, calloc, realloc   1F916BF4-7F64-4EAE-B9B1-7ECD00EFF5B2

备注: 晚点补上memset
 C语言跟内存分配方式[1]
 ①  从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
 ②  在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
 ③  从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多
 总结  alloc申请的是栈上的内存,无需手动释放。一般不用。
 malloc, calloc, realloc申请的是堆上的内存,
释放完全要靠自己free
 void free(void *p);
   
 alloc  向栈申请内存,函数结束时候自动释放
 无需free
 malloc  void* malloc(unsigned
size);
 如果调用成功,函数malloc()和calloc()都将返回所分配的内存空间的首地址。
 malloc, calloc,
realloc申请的是堆上的内存, 释放完全要靠自己free

 分配空间  在内存的动态存储区中分配一块长度为“size”字节的连续区域。
 初始化  只分配空间,可能是0也可能是其他
 要自己初始化
 memset(void *b, int
 c, size_t  len>)
http://blog.csdn.net/my_business/article/details/40537653
 

   
 注意  malloc, calloc, realloc申请的是堆上的内存
 释放完全要靠自己free
 calloc  void* calloc(size_t numElements, size_t
sizeOfElement);
如果调用成功,函数malloc()和calloc()都将返回所分配的内存空间的首地址。

 分配空间    calloc()函数有两个参数,分别为元素的数目和每个元素的大小

这两个参数的乘积就是要分配的内存空间的大小: 
  

 初始化   函数calloc() 会将所分配的内存空间中的每一位都初始化为零
   
   
 注意  malloc, calloc, realloc申请的是堆上的内存
 释放完全要靠自己free
 realloc
  
 void* realloc(void* ptr, unsigned
newsize);

   
 不稳定   realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节

 如果能够满足,自然天下太平;
 如果数据后面的字节不够
 那么就使用堆上第一个有足够大小的自由块,现存 的数据然后就被拷贝至新的位置
 而老块则放回到堆上.

数据可能被移动.[2]

   
   
注意   malloc, calloc, realloc申请的是堆上的内存
 释放完全要靠自己free
   
   
   
   
   
   
参考: 
[1]《malloc()与 alloc()区别 (转)》,蔚蓝色的天空,
2010/03/22, http://www.cnblogs.com/longyi1234/archive/2010/03/22/malloc.html
[2]《malloc、calloc、realloc的区别》,
shuaishuai80, 2011/01/15, http://blog.csdn.net/shuaishuai80/article/details/6140979
 

C语言内存管理总结的更多相关文章

  1. Go语言内存管理(一)内存分配

    Go语言内存管理(一)内存分配 golang作为一种"高级语言",也提供了自己的内存管理机制.这样一方面可以简化编码的流程,降低因内存使用导致出现问题的频率(C语言使用者尤其是初学 ...

  2. C语言 内存管理(转)

     转自 https://blog.csdn.net/u011616739/article/details/61621815 C语言 内存管理 1.内存分区 C源代码进过预处理.编译.汇编和链接4步生成 ...

  3. 深入理解Linux C语言内存管理

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

  4. C语言内存管理(转)

    伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆.如果 ...

  5. iOS学习08之C语言内存管理

    本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...

  6. 深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  7. 一个C语言内存管理模块的实现

    C 内存管理模块的编写 C语言手动管理内存很困难,有时候很难发现内存泄漏,这两天看了一下里面有写了一个简单的内存管理模块,发现挺精巧,可以有效检测内存泄漏 原理很简单,就是把C的malloc函数分配的 ...

  8. Objective-C语言内存管理

    • Objective-C为每个对象提供一个内部计数器,这个计数器跟踪对象的引用次数.所有类都继承自 NSObject 的对象retain和release方法. 如果使用了new.alloc或copy ...

  9. 黑马程序员——OC语言 内存管理

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)计数器 每个对象内部都保存了一个与之相关联的整数,称为引用计数器,当 ...

  10. OC语言-05-OC语言-内存管理

    一.引用计数器 1> 栈和堆 栈 ① 主要存储局部变量 ② 内存自动回收 堆 ① 主要存储需要动态分配内存的变量 ② 需要手动回收内存,是OC内存管理的对象 2> 简介 作用 ① 表示对象 ...

随机推荐

  1. 去重 取最大的一条sql

    select T.BILL_CODE,t.SCAN_TYPE,t.PIECE,SCAN_SITE,SCAN_MAN, row_number() over(partition by t.bill_cod ...

  2. linux free命令-显示内存的使用情况

    更多Linux 性能监测与优化 关注 Linux命令大全 free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区. 语法 free(选项) 选项 -b:以Byte为单 ...

  3. js之定时器操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Import CAD geometry in BladeModeler, turbogrid

    Table of Contents 1. Import CAD geometry in BladeModeler, turbogrid 1 Import CAD geometry in BladeMo ...

  5. 自己动手编写vue插件

    一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...

  6. 负载均衡之nginx+consul(自动更新路由)

    前几篇先是记载了如何通过nginx配置服务负载均衡,后面记载了如何通过 ocelot 配置 服务负载均衡,分别介绍了用webapi注册服务以及配置文件注册服务,通过ocelot webapi + co ...

  7. 百练4152:最佳加法表达式(dp+高精度)

    描述 给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值.例如,在1234中摆放1个加号,最好的摆法就是12+34,和为36 输入有不超 ...

  8. POJ 2217 Secretary

    Secretary Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID:  ...

  9. MyBatis启动:MapperStatement创建

    参考:http://blog.csdn.net/ashan_li/article/details/50351080 MappedStatement说明 一个MappedStatement对象对应Map ...

  10. 6、Java并发性和多线程-并发性与并行性

    以下内容转自http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html(使用谷歌翻译): 术语并发和并行性 ...