C内存分配方式:

  • 栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表
  • 全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。  程序结束后由系统释放。
  • 常量区—常量字符串就是放在这里的,直到程序结束后由系统释放。
  • 代码区—存放函数体的二进制代码。

注:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。

C++内存分配方式:

  • 栈区(stack)—就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用
  • 堆区(heap)—就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动态地扩展和收缩。
  • 全局区存储区(静态区)(static)—这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)
  • 自由存储区 — 就是那些由 malloc 等分配的内存块,他和堆是十分相似的,不过它是用 free 来结束自己的生命的

相关链接:

C++:http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html

C:http://www.cnblogs.com/coder2012/p/3150757.html

C内存分配方式与C++内存分配方式相关推荐

  1. 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)

    如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...

  2. linux系统分配文件夹内存,详解Linux系统内存知识及调优方案

    内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大.内存作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器 ...

  3. 内存管理之虚拟页式分配

    分页内存分配和分段内存分配可以解决程序在内存中离散存放的问题,但是,这个两种方式都要求程序将整个装入内存.如果程序比内存大,那么分页和分段都无法解决这个问题.其实一个程序在短时间内的执行可能局限于某小 ...

  4. linux内存分配缺陷,Linux系统优化-内存错误分析

    造成内存错误的样例分析 例一:(释放代码段空间导致内存错误) 图1  Coding 运行错误显示: 图2内存错误显示 分析:如图2所示运行后出现内存错误,free(): invalid pointer ...

  5. 由动态分配和静态分配的数据在内存组成区别

    在c中使用molloc,free动态分配释放内存,而在c++中可以使用new  delete运算符.比如在c中定义数组我们可以有两大种方式: 1,静态分配内存:如:  int   a[10]; 2,使 ...

  6. linux 跟踪内存,用strace跟踪malloc内存分配

    strace介绍 strace是一个非常有用的命令,它用于记录和跟踪程序运行期间收到的信号和调用的系统调用. strace的简单使用 ubuntu64:~$ strace cat /dev/null ...

  7. java内存模型 创建类_JVM内存模型及String对象内存分配

    昨天看了一篇关于<Java后端程序员1年工作经验总结>的文章,其中有一段关于String和StringBuffer的描述,对于执行结果仍然把握不准,趁此机会也总结了下JVM内存模型. 1. ...

  8. ntfs分配单元大小_万字长文图解 Go 内存管理分析:工具、分配和回收原理

    " golang的内存分析工具怎么用?内存和回收原理,这一篇就够了" 大纲 1. 目录 2. 由一个问题展开 3. 名字说明 4. 内存怎么采样? 4.1 编译期间逃逸分析 4.2 ...

  9. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  10. 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

最新文章

  1. 远程服务器如何传文件大小,linux服务器远程传文件大小
  2. word文档基本编辑功能_【读者培训】Word在编辑长文档时的基本应用
  3. 高性能mysql 第六章_高性能MySQL 第六章
  4. 网络适配器有感叹号不能上网_笔记本电脑显示无internet安全,不能无线上网怎么办...
  5. python编程思维培养_Python教学:编程如何培养学生计算思维-最新教育资料
  6. 发布到服务器接口404_接口测试怎么做?
  7. P2662 牛场围栏(同余最短路)
  8. linux 软件 runtime,Objective-C中runtime机制的应用
  9. web.xml详细配置
  10. 【脑洞大开】假如BERT系列论文变成Commit History
  11. 微信小程序 添加卡券至微信卡券
  12. 用python 调用whatsapp自动发消息
  13. mikrotikROS路由配置L2TP
  14. 汽车的主要结构参数和性能参数
  15. 聊聊路径规划算法—快速搜寻随机树算法
  16. 银联云闪付开发联调步骤向导
  17. 做中国的Salesforce,神州云动凭的是什么?
  18. 基于C++实现的图像检索系统
  19. SM8350 Codec通路图:bolero + wcd9385 + CS35L41
  20. saas架构理解与设计

热门文章

  1. SPSS数据分析常见问题(差异性研究)
  2. 苹果手机编辑word_苹果手机自带了三个PDF功能!每一个都这么好用!你知道几个呢?...
  3. excel转置怎么操作_Excel拆分文本,想怎么拆就怎么拆,简单易学,一看就会
  4. UninstallPKG 1.1.9 Mac卸载工具
  5. 腾讯云Centos8.0 CPU使用率100%,top查询为kthreaddk占用异常
  6. 香港服务器到大陆各地的网络延迟大小
  7. 【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
  8. 微软产品下载地址。MSDN 我告诉你。
  9. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
  10. NXP JN5169 唤醒定时器