更新: 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. Python之实例属性和类属性

    参考原文 廖雪峰Python 实例属性和类属性 在前面已经说过由于Python是动态语言,可以根据类的实例绑定任何的属性. 给实例绑定属性的方法是通过实例变量,或者self变量绑定的: class S ...

  2. springmvc视图解析

    SpringMVC 视图解析的几种方式: 在视图解析的过程中,需要知道逻辑view的名字,model的名字以访问model和view. 使用jsp进行解析,InternalResourceViewRe ...

  3. STL++?pb_ds平板电视初步探索

    什么是pb_ds? 除了众所周知的STL库,c++还自带了ext库(应该可以这么叫吧),其中有用pb_ds命名的名称空间(俗称平板电视).这个名称空间下有四个数据类型结构.这些都是鲜为人知的.经过测试 ...

  4. 将网络图片转换为base64

    public static function htmlPdf() { $img_path = Env::get('ROOT_PATH').'/public/images/wechat/user.jpg ...

  5. BNUOJ 2461 Anniversary party

    Anniversary party Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Origi ...

  6. Android BottomSheet:以选取图片为例(2)

     Android BottomSheet:以选取图片为例(2) 附录文章5简单介绍了常见的分享面板在BottomSheet中的具体应用.本文再以常见的选取图片为例写一个例子. 布局文件: < ...

  7. [bzoj1492][NOI2007]Cash[CDQ分治;dp;斜率优化]

    首先,设f[x]表示x天能获得的A券最大值,有动规方程: $f[i]=max\{f[j]*A[i]+f[j]*B[i]/R[j]\}*R[i]/(R[i]*A[i]+B[i])$, 设 $j<k ...

  8. spring历史地址

    http://repo.spring.io/release/org/springframework/spring/

  9. 武大OJ 612. Catch the sheep

    Description Old Sama is a great and powerful magician in the word. One day, a little girl, Anny, tou ...

  10. RAC 设置archive log模式

    首先设置 archive log的位置 SQL> alter system set log_archive_dest='+DATA/orcl/archive/'; System altered. ...