C++的内存模型
2015-07-02 08:35
796 查看
Simplified Memory Model (C++的内存模型)
1. Stack (栈)
编译器自动分配释放(包括所有函数里面的局部变量,形式参数)
2. Heap (堆)
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收(若使用new运算符分配内存,如不用delete释放的话,有可能会内存泄漏,也有可能在程序结束时,由操作系统自动收回)
3. Global/Static (全局区/静态区)
全局变量和静态变量的存储是放在一块的。
可以简单认为:
• 程序启动全局/静态变量就在此处
• 程序结束释放
4. Constant (常量区)
可以简单理解为所有常量都放在一起
该区域内容不可修改
注意:
这个简化模型仅用于初学者示意
与实际模型并不完全一致
![](http://img.blog.csdn.net/20150702085654327?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHhfX2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150702085611194?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHhfX2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150702085725448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHhfX2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150702085744954?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHhfX2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
对于函数中创建类对象,是放在栈里面的,如下:
![](http://img.blog.csdn.net/20150702112341443?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHhfX2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
转载自云课堂http://mooc.study.163.com/learn/BUPT-1000003015?tid=1000002016#/learn/content?type=detail&id=1000129033
1. Stack (栈)
编译器自动分配释放(包括所有函数里面的局部变量,形式参数)
2. Heap (堆)
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收(若使用new运算符分配内存,如不用delete释放的话,有可能会内存泄漏,也有可能在程序结束时,由操作系统自动收回)
3. Global/Static (全局区/静态区)
全局变量和静态变量的存储是放在一块的。
可以简单认为:
• 程序启动全局/静态变量就在此处
• 程序结束释放
4. Constant (常量区)
可以简单理解为所有常量都放在一起
该区域内容不可修改
注意:
这个简化模型仅用于初学者示意
与实际模型并不完全一致
对于函数中创建类对象,是放在栈里面的,如下:
转载自云课堂http://mooc.study.163.com/learn/BUPT-1000003015?tid=1000002016#/learn/content?type=detail&id=1000129033
相关文章推荐
- c++11 使用c++风格的cast: static_cast<type>(expression) const_cast<type> dynamic_cast reinterpret_cast
- 黑马程序员---C语言基础---概述
- 《C语言陷阱与缺陷》读书笔记 之 运算符优先
- C++智能指针的实现
- C语言指针学习
- C语言字符串以及二维数组指针
- CPP数据类型本质以及变量本质分析
- C语言程序内存四区(栈区,堆区,全局区,代码区)
- C语言 基础60题(2)――二维数组操作
- C++ 内存分配(new,operator new)详解
- 黑马程序员-OC语言-动态类型和静态类型(听课笔记)
- 黑马程序员-OC语言-@synthesize关键字介绍和使用(听课笔记)
- 运行C++程序是出现错误:cannot open Debug/1.exe for writing
- 黑马程序员-OC语言-@property关键字介绍及使用(听课笔记)
- C语言中数组作为函数参数的问题
- No.0 C++基础---C++经典著作列表
- 黑马程序员——C语言之机器数真值、原反补码、位运算与变量地址获取及输出原理
- 黑马程序员-OC语言-点语法介绍和使用(听课笔记)
- 黑马程序员-OC语言-SEL类型(听课笔记)
- c++ uuid生成法则