一个由c/c++编译的程序占用的内存分为以下几个部分:

栈区

由编译器自动分配释放,存放函数的参数值,局部变量的值等。

堆区

一般由程序员分配释放,若程序员不释放,程序结束时可能由os回收。

全局区(静态区)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域data段,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域bss段。程序结束后由系统释放

文字常量区

常量字符串就是放在这里的,常量字符串不能修改,否则程序会在运行期崩溃,程序结束后由系统释放

程序代码区:存放函数体的二进制代码

//main.cppint a = 0;全局初始化区char *p1;全局未初始化区main(){int b;//栈char s[] = "abc";//栈char *p2;//栈char *p3 = "123456"; //123456\0在常量区,p3在栈上static int c = 0; //全局(静态)初始化区p1 = (char *)malloc(10);p2 = (char *)malloc(20);//分配得来的10和20字节的区域就在堆区}

申请后系统的响应:

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出

堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动将对于的那部分重新放入空闲链表中。

c/c++编译的程序占用的内存分配相关推荐

  1. java程序占用实际内存大小

    一.java程序占用实际内存大小 1.1.java命令启动参数-Xms -Xmx的问题         启动命令如下:java -server -Xms128m -Xmx128m -jar ****. ...

  2. 通过显示当前 python 程序占用的内存大小来比较生成器和迭代器(转载)

    # 显示当前 python 程序占用的内存大小 import osimport psutil as psutildef show_memory_info(hint):# 获取当前进程的进程号pid = ...

  3. java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除

    java应用程序占用高内存 重要要点 解决内存问题可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程. Java HotSpot JVM可以报告几种OutOfMemoryError消息,因此务 ...

  4. STM32程序占用的内存容量计算

    STM32中程序占用内存容量 Keil MDK下Code, RO-data,RW-data,ZI-data这几个段: Code存储程序代码. RO-data存储const常量和指令. RW-data存 ...

  5. linux查看native进程,Android 分析应用程序占用native内存

    Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小:然而Native 内存并不能在虚拟堆上看到:Android系统基于Linux,这样的话其具备Linux的大多数特性: ...

  6. Java程序运行的内存分配

    Java的内存分配 A:栈 存储局部变量 B:堆 存储所有new出来的 C:方法区(程序代码及方法相关) D:本地方法区(系统相关) E:寄存器(CPU使用) 注意: a:局部变量 在方法定义中或者方 ...

  7. 通过keil编译明白自己的程序占用的内存大小。堆栈大小分配,32单片机片内存储flash的使用。

    目录 1.通过keil编译程序,得到自己代码需要单片机的flash和RAM大小 2.在程序中调整堆栈的大小 3.单片机片内flash的使用 1.通过keil编译程序,得到自己代码需要单片机的flash ...

  8. 怎么测试一个java程序占用的内存和cpu消耗?

    1.测试查看单独的class的资源消耗方法. Runtime r = Runtime.getRuntime();     long freeMemory = r.freeMemory(); long ...

  9. [转]预备知识—程序的内存分配

    因为经典,所以转发. 一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 栈区(stack)  -   由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方 ...

  10. 一、预备知识―程序的内存分配

    2019独角兽企业重金招聘Python工程师标准>>> 一个由c/C++编译的程序占用的内存分为以下几个部分  1.栈区(stack)―   由编译器自动分配释放 ,存放函数的参数值 ...

最新文章

  1. 使用Docker for Windows初体验
  2. android电视盒子解码很慢,电视盒子反应慢又卡原因及解决办法推荐!
  3. 应用内安装部分手机出现解析错误
  4. 平流式初沉池贮砂斗计算_?初沉池、二沉池的作用与区别-亨孚科技
  5. oracle创建视图类型为日期,oracle创建视图包含clob字段,报错:数据类型不一致:应为-,但却获得CLOB...
  6. 基于CAS的低时延队列实现(原理示例)
  7. php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍
  8. SpringBoot 笔记
  9. spring中的BeanFactory和FactoryBean的区别与联系
  10. 2016年408考研算法题
  11. 2016年统计用区划代码和城乡划分代码(截止2016年07月31日) 省市县镇+url
  12. jQuery WEUI select的使用
  13. [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
  14. N皇后问题 - 构造法原理与证明: 时间复杂度O(1)
  15. 秋季当养肺,水果蔬菜来帮忙
  16. Line 14: Char 23: runtime error: signed integer overflow: 746384741 * 10 cannot be represented
  17. Java设计模式----创建者模式
  18. 文字细化算法matlab,细化算法matlab
  19. Windows CMD命令行一启动就闪退问题解决
  20. Linux LVM(逻辑卷管理)

热门文章

  1. 解决 ThinkPad x270 安装 ubuntu 14.04 后的网络问题
  2. PHP连数据库生成数据字典
  3. Android新组件CardView
  4. c html 转 pdf,HTML 转 PDF
  5. 织梦支持php版本,DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法...
  6. (16)数据结构-并查集
  7. (1) 还原二叉树 (25 分)
  8. 配置oracle方言类,Oracle环境下的Hibernate方言配置
  9. java获取数据库列的别名_java – JDBC ResultSet获取具有表别名的列
  10. python其他字符转换为ascii码