更新: 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. 诊断:记一次存储异常CRASH致数据库无法正常打开的恢复

    数据库存储异常crash,首先控制文件出现问题 ORA-: ????? ???? ORA-: ???? : '/oracledata/oradata/orc11rac/orc11rac/system0 ...

  2. POJ2454——Jersey Politics

    POJ2454——Jersey Politics 题目大意: 在泽西奶牛和荷斯坦奶牛的最新普查中,威斯康星奶牛在谷仓中获得了三个档位. 泽西奶牛目前控制着国家重新分配委员会. 他们想将国家分为三个相当 ...

  3. Python学习-变量

    什么是变量? 概念:变量就是会变化的量,主要是“变”与“量”二字.变即是“变化”. 特点:与其他编程语言相同,变量是最基本的存储单位,是用来存放数据的容器.可以引用一个具体的数值,进而直接去改变这个引 ...

  4. linux安装java mysql tomcat 环境

    安装jdk: 1. 查看系统版本 uname -a 2.查看操作系统 cat  /proc/version 3.上传安装文件到指定目录   tar -zxvf jdkxxx. 4.修改配置文件  vi ...

  5. django自身提供的sitemap和feed实现样例

    <DJANGO BY EXAMPLE>这书的例子真是精心全过的, 基本的WEB开发过程全覆盖啊. 跟着一步一步的弄就OK啦..可以长很多知道的. 这次跟着作的是sitemap和feed功能 ...

  6. sharepoint第三方程序认证尝试失败记录

    本来想用REST服务开发第三方的插件的,下面的文章说明REST API是非常好用的 https://technet.microsoft.com/zh-cn/library/jj164022(v=off ...

  7. Ubuntu 16.04中CPU轮流100%的问题解决

    刚装好Ubuntu 16.04,但是观察各个CPU都是轮流100%,如图所示:

  8. Eclipse错误出现:Unable to install breakpoint in... (未能解决)

    Unable to install breakpoint in... Eclipse Unable to install breakpoint in  的问题还是没解决 1.重装eclipse无效 2 ...

  9. 浅谈SQL Server 对于内存的管理--宋沄剑 英文名:CareySo

    http://www.cnblogs.com/CareySon/archive/2012/08/16/HowSQLServerManageMemory.html

  10. 菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程

    菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...