C++内存区域
来源:互联网 发布:bootstrap less源码 编辑:程序博客网 时间:2024/05/17 07:32
C++内存区域
程序由代码和数据组成,其中代码存储在代码区中,数据根据类型的不同存储在不同的区域中,C++中可分为全局/静态区、常量数据区、栈区和堆区等。
1、 全局/静态区及常量数据区
该存储区主要用于存储全局变量、静态变量以及字符串常量等。在程序编译阶段已经分配完毕。且字符串常量存储区是不可修改的内存区域。
2、 栈区
栈区用于存储函数内部的局部变量或者函数参数等。该部分内存在进入其所属的作用域时由该区域的栈统一分配,并在退出该区域时自动释放。
3、 堆区
堆区用于存放开发人员动态申请的空间(通过malloc/new等函数)。该区中分配的空间必须通过开发人员显示回收(通过free/delete等函数)。
4、 栈区与堆区的比较
1、 分配和释放
栈区的内存由系统自动分配与释放,而堆区的内存由开发人员动态分配和回收。
2、 大小
一个程序使用栈的大小时固定的,由编译器决定,且比较小,Visual Studio 2003下栈的默认大小为
3、 效率
由于栈的内存由系统自动分配,压栈和出栈都有相应的指令,故效率较高,且分配的内存空间是连续的,不会产生内存碎片;而堆是动态分配的需要根据算法寻找合适的内存,故效率较低;另外,程序运行过程中,栈一般是常驻内存的,而堆一般是不常驻内存的。
验证程序:
#include <iostream>
using namespace std;
int nGlobal = 100; /*全局变量*/
int main()
{
static int nLocalStatic = 100; /*静态变量*/
int nLocal = 10; /*局部变量*/
const int nLocalConst = 20; /*局部常量*/
char localArray[16] = "LocalArray"; /*局部数组*/
char *pLocalString1 = "LocalString1"; /*指向字符串常量的指针变量*/
const char *pLocalString2 = "LocalString2"; /*指向字符串常量的指针常量*/
int * pNew = new int[32]; /*new动态申请*/
char *pMalloc = (char *)malloc(sizeof(char) * 16); /*malloc动态申请*/
/*全局变量、静态变量*/
printf("global variable : 0X%X/n", &nGlobal); /*0X458FA0*/
printf("static variable : 0X%X/n", &nLocalStatic); /*0X458FA4*/
/*常量字符串*/
printf("local expression : 0X%X/n", pLocalString1); /*0X451348*/
printf("local const expression : 0X%X/n", pLocalString2); /*0X451338*/
/*局部变量:栈区*/
printf("local variable : 0X%X/n", &nLocal); /*0X12FED4*/
printf("Local array : 0X%X/n", &localArray); /*0X12FEC8*/
printf("local const variable : 0X%X/n", &nLocalConst); /*0X12FEB0*/
printf("local pointer : 0X%X/n", &pLocalString1); /*0X12FEA4*/
printf("local const pointer : 0X%X/n", &pLocalString2); /*0X12FE98*/
/*动态变量:堆区*/
printf("local new : 0X%X/n", pNew); /*0X
printf("Local malloc : 0X%X/n", pMalloc); /*0X380AB0*/
system("pause");
}
- C/C++内存区域
- c/c++内存区域
- C语言内存区域
- C语言内存区域分配
- c/c++ 内存区域划分
- C++内存区域
- <C++>内存存储区域划分
- C与c++内存区域
- C语言内存区域分配
- C程序-内存区域分配
- C/C++—— 内存区域划分
- c/c++中内存区域划分总结
- C程序的内存分配区域
- c语言内存占用区域,以及详解
- c/c++中内存区域划分总结
- C和C++内存区域的划分
- c/c++变量内存分配区域
- C语言 内存的五个区域
- 获取M$ SQL Server用户表的字段信息
- 写时拷贝技术与共享节
- 堆的使用
- C/C++中类的存储方式
- List 和 ArrayList 区别
- C++内存区域
- 高效使用C/C++变量
- 函数的效率
- 基本编程语句的效率特性
- JSP页面四大操作访问MySQL数据库,相对应的sql语句
- 软件测试工具
- 甘特图编写完成
- IoGetDriverObjectExtension反汇编码及伪码
- silverlight是什么?