C++/CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了与以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:

  1. gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址.
  2. gcnew创建的对象由虚拟机托管,而new创建的对象必须自己来管理和释放.
  3. 那什么又是托管堆呢?
    内存格局通常分为四个区
    全局数据区:存放全局变量,静态数据,常量
    代码区:存放所有的程序代码
    栈区:存放为运行而分配的局部变量,参数,返回数据,返回地址等,
    堆区:即自由存储区
    值类型变量与引用类型变量的内存分配模型也不一样。为了理解清楚这个问题,读者首先必须区分两种不同类型的内存区域:线程堆栈(Thread Stack)和托管堆(Managed Heap)。
    每个正在运行的程序都对应着一个进程(process),在一个进程内部,可以有一个或多
    个线程(thread),每个线程都拥有一块“自留地”,称为“线程堆栈”,大小为1M,用于保
    存自身的一些数据,比如函数中定义的局部变量、函数调用时传送的参数值等,这部分内存
    区域的分配与回收不需要程序员干涉。
    所有值类型的变量都是在线程堆栈中分配的。
    另一块内存区域称为“堆(heap)”,在.NET 这种托管环境下,堆由CLR 进行管理,所
    以又称为“托管堆(managed heap)”。
    用new 关键字创建的类的对象时,分配给对象的内存单元就位于托管堆中。
    在程序中我们可以随意地使用new 关键字创建多个对象,因此,托管堆中的内存资源
    是可以动态申请并使用的,当然用完了必须归还。
    打个比方更易理解:托管堆相当于一个旅馆,其中的房间相当于托管堆中所拥有的内存
    单元。当程序员用new 方法创建对象时,相当于游客向旅馆预订房间,旅馆管理员会先看一下有没有合适的空房间,有的话,就可以将此房间提供给游客住宿。当游客旅途结束,要办理退房手续,房间又可以为其他旅客提供服务了。
    从表 1 可以看到,引用类型共有四种:类类型、接口类型、数组类型和委托类型。
    所有引用类型变量所引用的对象,其内存都是在托管堆中分配的。
    严格地说,我们常说的“对象变量”其实是类类型的引用变量。但在实际中人们经常将
    引用类型的变量简称为“对象变量”,用它来指代所有四种类型的引用变量。

gcnew 与 new 的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

最新文章

  1. 一起学习阿里巴巴数据中台实践!首次公开!
  2. MSRA副院长周明博士:四大研究领域揭示自然语言技术的奥秘
  3. Gentoo - X11 forwarding request failed on channel 0
  4. 如何快速实现移动端短视频功能?
  5. php linux权限,Linux权限详细介绍
  6. V1-bug Alpha阶段项目展示
  7. C语言高级编程:数组名赋值给指针变量的用法解析
  8. kickStart脚本
  9. 前端之旅,做一点有回报的事情
  10. ZZULIOJ 1108: 打印数字图形(函数专题)
  11. 在Office 365中使用自助密码重置功能减轻管理员负担(一)功能简介
  12. Hamcrest 总结
  13. 写代码不严谨,我就不配当程序员?
  14. Log4j配置使用的简单教程
  15. 粗略读了一遍李子奈的《计量经济学》
  16. safari支持java_BLOB URL无法在Safari中使用
  17. 老牛不知所以然-html中超长文字单行省略对弹性盒子约束的破坏现象
  18. 建议收藏:GitHub 上值得收藏的100个精选前端项目!
  19. 设计原则之【开闭原则】
  20. nuxt / ssr简介以及要不要使用服务端渲染(SSR)?

热门文章

  1. 12、Power Query-透视列实例应用(多单元格记录合并及汇总)
  2. MIGO时没发料不允许入库
  3. SAP中如何给成本要素分配多个默认成本中心
  4. ABAP取字符串中的连续数字
  5. 调试Excel VBA代码
  6. MONTH_NAMES_GET
  7. 网易考拉没有了,网易严选还会远吗?
  8. java arraylist 源代码_Java中ArrayList源码浅析
  9. oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...
  10. 攻防世界-Misc-What-is-this(简单易懂)