• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中的内存分区介绍

C++中的内存分区介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++动态内存分配,c++对象的内存模型,c++无法读取内存,c++共享内存,c++内存泄漏等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C++的内存划分为栈区、堆区、全局区/静态区、字符串常量和代码区。

这里去掉自由存储区,增加了代码区,理由会在下面讲到。

栈区:由系统进行内存的管理。

说明:主要存放函数的参数以及局部变量。栈区由系统进行内存管理,在函数完成执行,系统自行释放栈区内存,不需要用户管理。整个程序的栈区的大小可以在编译器中由用户自行设定,默认的栈区大小为3M。

全局/静态区:全局、静态数据存放在一起的,初始化的全局变量和静态变量是在一起的。未初始化的全局变量和静态变量是在相邻的空间中。

说明:全局变量和静态全局变量的存储方式是一致的,但是其区别在于,全局变量在整个源代码中都可以使用,而静态全局变量只能在当前文件中有效。比如我们的一个程序有5个文件,那么某个文件中申请了静态全局变量,这个静态全局变量只能在当前文件中使用,其他四个文件均不可以使用。而某个文件中申请了全局变量,那么其他四个文件中都可以使用该全局变量(只需要通过关键字extern申明一下就可以使用了)。事实上static改变了变量的作用范围。

字符串常量区:存放字符串常量,程序结束后,由系统进行释放。比如我们定义char * p = “Hello World”; 这里的“Hello World”就是在字符串常量中,最终系统会自动释放。

代码区:存放程序体的二进制代码。比如我们写的函数,都是在代码区的。

堆区:由用户手动申请,手动释放。在C中使用malloc,在C++中使用new(当然C++中也可以使用malloc)。

说明:new操作符本质上还是使用了malloc进行内存的申请,因此我将自由存储区和堆区都说成堆区,不过两者还是有很大的差别。

1)malloc是C语言中的函数,而new是C++中的操作符。

2)malloc申请之后返回的类型是VOID*,而new返回的指针带有类型。

3)malloc只负责内存的分配而不会调用类的构造函数,而new不仅会分配内存,而且会自动调用类的构造函数。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 怎么用C++提取任意一张图片的特征(从内存读取数据)
  • C++实现动态绑定代码分享
  • C++实现当前时间动态显示的方法
  • C++中的内存分区介绍
  • c++动态内存空间示例(自定义空间类型大小和空间长度)
  • 基于C++中常见内存错误的总结
  • C++中关于Crt的内存泄漏检测的分析介绍

相关文章

  • 2017-05-28数组指针、指针数组以及二位数组的深入解析
  • 2017-05-28基于Turbo C(V2.0)编译错误信息的详细介绍
  • 2017-05-28C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
  • 2017-05-28深入解析C中的数值与真假
  • 2017-05-28提高C++程序运行效率的10个简单方法
  • 2017-05-28C++与C#互调dll的实现步骤
  • 2017-05-28C/C++产生随机数函数简单介绍
  • 2017-05-28了解C++编程中指定的异常和未经处理的异常
  • 2017-05-28C++函数模板与类模板实例解析
  • 2017-05-28C++判断矩形相交的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# interface与delegate效能比较的深入解析
    • c++中引用和指针的区别和联系
    • linux C 打印错误信息和标准输入输出详细介绍
    • DSP中浮点转定点运算--定点数的加减乘除运算
    • C语言 位域详解及示例代码
    • C++中函数的默认参数详细解析
    • C++实现简单的希尔排序Shell Sort实例
    • C++中实现队列类链式存储与栈类链式存储的代码示例
    • C++抽奖程序实现方法
    • c语言一级指针

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有