C/C++内存区域划分详解
C/C++内存区域划分详解
C/C++内存分布
C/C++中,内存主要分为、堆、栈、全局/静态存储区和常量存储区。
栈:栈又叫堆栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等,是向下增长的。所谓向下生长的就是,先调用的栈帧的地址比后调用的地址大,栈一般大小有几个M左右。
#include<iostream>
using namespace std;void f2()
{int b = 0;cout << "b:" << &b << endl;
}
void f1()
{int a = 0;cout <<"a:" <<&a << endl;f2();
}
int main()
{f1();return 0;
}
堆:就是那些由new/malloc分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new/malloc就要对应一个delete/free,由程序员主动释放。堆是可以上增长的.意思是先建立的堆的地址小于后建立的堆的地址。
#include<iostream>
using namespace std;int main()
{void* p1 = malloc(10);void* p2 = malloc(10);cout << p1 << endl;cout << p2 << endl;return 0;
}
数据段:存储全局数据和静态数据。
代码段:可执行的代码/只读常量
知道了内存分布,下面就来做题吧,考验知识的时候到了,看看会做几题吧
是不是前几题还得心应手,后面就有点懵了
栈和堆的区别:
栈:由编译器自动分配并且释放,一般存储函数的参数局部变量等
堆:由程序员分配释放,若程不释放则系统释放
1、申请内存方式
栈:由系统自动分配,如变量的声明的同时会开辟空间,(int a; 开辟4个字节的空间)(静态指定)
堆:由程序员申请,需要制定大小(动态分配)
2、系统响应的不同
栈:只要剩余空间大于申请内存,系统就会提供,否则会栈溢出
堆:便历空闲地址链表,找到符合要求的,就删除该地址分配给程序,内存的首地址记录分配的大小,(方便delete)多余的内存回收
3、空间大小不同
栈:连续的,编译时就确定的常数
堆:不连续,他的上限决定于系统中有效的虚拟内存
4、执行效率的不同
栈:由系统分配,速度快
堆:程序员分配,速度慢,容易产生内存碎片,不过用起来方便
C/C++内存区域划分详解相关推荐
- JVM中的五大内存区域划分详解
一.快速扫盲 1. JVM是什么 JVM是Java Virtual Machine的缩写,即咱们经常提到的Java虚拟机.虚拟机是一种抽象化的计算机,有着自己完善的硬件架构,如处理器.堆栈等,具体有什 ...
- delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...
前言 那些使用过 C 或者 C++ 的读者一定会发现这两门语言的内存管理机制与 Java 的不同.在使用 C 或者 C++ 编程时,程序员需要手动的去管理和维护内存,就是说需要手动的清除那些不需要的对 ...
- Java内存区域与内存溢出异常详解
文章目录 运行时数据区域 程序计数器(线程私有) Java虚拟机栈(线程私有) 局部变量表 操作数栈 动态链接 方法返回地址 本地方法栈(线程私有) Java堆(全局共享) 方法区(全局共享) 运行时 ...
- Java内存模型(JMM)详解
在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...
- JVM堆内存与非堆内存(heap)官方详解
JVM堆内存与非堆内存(heap)官方详解 JAVA堆内存管理是影响性能主要因素之一. 堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的. 先看下JAV ...
- Java 内存模型 JMM 详解
转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...
- 内存性能参数详解(转载)
内存性能参数详解 先说说最有效提高你机器内存性能的几个参数:CL,TRP,TRCD CAS Latency "列地址选通脉冲潜伏期" BIOS中可能的其他描述为:tCL.CAS L ...
- 关于Linux的缓存内存 Cache Memory详解
30 (总结)关于Linux的缓存内存 Cache Memory详解 发表于: Linux, UNIX, 个人日记, 原创总结 | 作者: 谋万世全局者 标签: cache,Linux,Memory, ...
- JVM的内存区域划分(转)
原文链接:JVM的内存区域划分 JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内 ...
最新文章
- 量子力学工具箱再添利器—科学家提出高效驱动微型引擎概念
- CCF201403-1 相反数(100分)
- idea使用ant配置_Linux下Jenkins+ant+jmeter[上]
- cocos2d-x学习笔记 动作 CCCallFunc家族(回调函数包装器)
- 《服务外包概论》实验报告——版本管理与控制工具的综合应用
- Qt中的角度和正方向描述清单
- Server 2008 R2 AD RMS完整部署:一、用户创建篇
- 选择 Veeam ONE v10 的其他三大原因!
- Tomcat详解(三)——tomcat多实例
- phpFreeChat 2.0.0 发布,Web 聊天室
- C++ override什么意思
- 微信免卸载降级安装方法
- HDU 2197:本原串
- 负数在计算机中是如何表示的
- 使用vagrant搭建三台虚拟机环境
- Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】
- IPv4与IPv6有什么不同,如何升级到IPv6
- heic格式电脑怎么查看?
- Android-SQLite数据库实例,Android开发面试基础
- 如何阅读一本书 读后感