首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 软件频道>C++/CLI思辨录之传递托管堆地址

C++/CLI思辨录之传递托管堆地址

2005-08-18 18:05作者:朱先忠编译出处:天极网 责任编辑:方舟

天极软件专题专区精选     到天极软件“读编交流区”畅所欲言
Google专区 POPO专区 QQ专区 QQ挂机 了解Web2.0
Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 照片处理数字暗房
PPT动画演示教程 Excel动画教程集 Word动画演示教程 Windows Vista专区
特洛伊木马专区 黑客知识教程专区 防火墙应用专区 注册表应用专区
Windows API开发专区 网络编程专区 VB数据库编程专区 图像处理与多媒体编程

  新的C++特点平衡了把托管堆的地址传递到非托管代码的能力。早期我们遇到的最大问题是,在托管堆中的对象的位置是非静态的。垃圾收集器以变化的时间间隔移动对象。现在新的pin_ptr(别针型指针)的引入禁止垃圾收集器改变在堆上的对象的地址。

  下面代码展示了别针型指针的应用。

#pragma unmanaged
//本机函数,以整型指针作参数,执行计算
void calc(int* val)
{
 //执行计算操作
}
#pragma managed
//托管函数调用本机calc函数
int managedfunc()
{
 int i=gcnew int(10);
 //把i的地址设置为别针型,以阻止对i的移动
 pin_ptr<int> ppi=&i;
 int* np=ppi;
 calc(np);//用别针型int的地址调用本机函数
 //把别针型指针的值置为nullptr,脱离了gc的限制
 ppi=nullptr;
 //完成剩下的工作
 return i;
}

  基于轮廓的优化(Profile Guided Optimization)

  在新版本的托管C++中有一项新增功能称为基于轮廓的优化。这一新的编译特点能够实现在编译时刻把探针注入到代码中。最后的exe文件与一个数据库一起打包发送,由该库记录下注入代码中的探针监测到的结果数据。当用户运行该程序时,这些探针记录下应用程序的使用。当你下一次再编译时,编译器作出智能性决策,如根据探针的记录作为相应的动作。这一特性带来了真实世界的优化。

  为什么没有为使用托管类型而定义头文件?

  在传统的C++中,一个头文件一般包含对象的接口,或者类与函数的声明,等等。这允许在多个翻译单元上实现某种类型的一致性声明。对于一个用托管代码编写的且其被编译成MSIL的对象,需要在配件集中包含描述对象的元数据。因而,托管C++编译器不是通过头文件,而是通过使用配件集元数据来实现接口的读取。这就是为什么你不必因使用托管类型而包含头文件。事实上,你可以通过使用#using指令来让编译器从配件集中读取元数据。

关注此文的读者还看过:

返回软件频道首页

共1页。 1
  • 1.C++/CLI思辨录之传递托管堆地址

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络