博客
关于我
C++的内存分类
阅读量:200 次
发布时间:2019-02-28

本文共 1536 字,大约阅读时间需要 5 分钟。

1.C++中的内存分为五大区域:

(1)      栈   存放局部变量,函数形参 调用函数式系统会自动分配一个栈

(2)      堆   存放由new存放的内存块,如果没有使用delete及时清理,会造成内存泄露

(3)      自由存储区    存放由malloc申请的内存块,

(4)      全局变量/静态变量区  存放全局变量静态变量

(5)      常量区  存放整数字符串等的常量

堆和栈的区别:

栈由系统自动分配,堆由程序员自己申请,系统在内存中寻找空闲的内存,将对应的内容写入空闲的内存。栈申请效率高,但大小有限制,堆申请效率较低。栈向低地址方向生长,堆向高地址方向生长。

代码:

# include 
using namespace std;# include
int global=1; //全局/静态变量区int main(){int a;char b[12];char *c=new char (); //栈区char *e=(char *)malloc(8*sizeof(char)); //分配的内存块在堆中,指针e在栈中int d=5; //常量区return 0;}

上面的代码产生的汇编代码是:

gdb) disas mainDump of assembler code for function main:   0x004016b0 <+0>:     push   %ebp   0x004016b1 <+1>:     mov    %esp,%ebp   0x004016b3 <+3>:     and    $0xfffffff0,%esp   0x004016b6 <+6>:     sub    $0x30,%esp   0x004016b9 <+9>:     call   0x401d00 <__main>   0x004016be <+14>:    movl   $0x1,(%esp)   0x004016c5 <+21>:    call   0x401760 <_Znwj>   0x004016ca <+26>:    movb   $0x0,(%eax)   0x004016cd <+29>:    mov    %eax,0x2c(%esp)   0x004016d1 <+33>:    mov    $0x8,%eax   0x004016d6 <+38>:    mov    %eax,(%esp)   0x004016d9 <+41>:    call   0x403728 
0x004016de <+46>: mov %eax,0x28(%esp) 0x004016e2 <+50>: movl $0x5,0x24(%esp) 0x004016ea <+58>: mov $0x0,%eax 0x004016ef <+63>: jmp 0x4016f9
0x004016f1 <+65>: mov %eax,(%esp) 0x004016f4 <+68>: call 0x401f70 <_Unwind_Resume> 0x004016f9 <+73>: leave 0x004016fa <+74>: retEnd of assembler dump.(gdb)

由汇编代码可知,指针c位于栈偏移0x2c的位置,指针e位于栈偏移0x28的位置,整数d位于栈偏移0x24的位置,变量a和b由于未初始化,没有分配内存。

转载地址:http://nmwp.baihongyu.com/

你可能感兴趣的文章
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>