当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 2.3.4、 Copy-On-WriteNT-FAMILY: 宋
 

 

    摘要:概要excel 2002 引入了用扩展标记语言 (xml) 格式打开文件的功能。使用用户界面或代码可以在 excel 2002 或 excel 2003 中直接打开构造良好的 xml 文件。 在 visual c# .net 中,您可以利用 excel 的 xml 功能向工作簿中无缝传输数据,从而以您选择的格式和排列方式呈现数据。本文演示如何完成此任务。返回页首 从数据集生成在 excel 2002 或 excel 2003 中使用的 xml本节说明如何创......
    摘要: 无标题文档 配置 ibmhttpserver和websphereapplicationserver连接 优化应用服务器性能 在本文中,你可以学习到: • 使用 ibm http server 的好处有哪些 • 如何配置 ibm http server和ibm websphere application server连接 • 如何发布 ear包使之能优化ibm websphere application server性能 &#......


标准C++类string的Copy-On-Write技术(三)
2.3.4、      copy-on-write的具体实现是怎么样的?

最后的这个问题,我们主要解决的是那个“民主集中”的难题。请先看下面的代码: 【相关文章:DoEvents 在VB中的妙用

  【扩展阅读:Xray@NET,协议插件实现方式的简述

string h1 = “hello”; 【扩展信息:什么是面向服务体系结构?(二)

 

string h2= h1;

string h3;

h3 = h2;

 

string w1 = “world”;

string w2(“”);

w2=w1;

 

很明显,我们要让h1、h2、h3共享同一块内存,让w1、w2共享同一块内存。因为,在h1、h2、h3中,我们要维护一个引用计数,在w1、w2中我们又要维护一个引用计数。

 

如何使用一个巧妙的方法产生这两个引用计数呢?我们想到了string类的内存是在堆上动态分配的,既然共享内存的各个类指向的是同一个内存区,我们为什么不在这块区上多分配一点空间来存放这个引用计数呢?这样一来,所有共享一块内存区的类都有同样的一个引用计数,而这个变量的地址既然是在共享区上的,那么所有共享这块内存的类都可以访问到,也就知道这块内存的引用者有多少了。

 

请看下图:

 

于是,有了这样一个机制,每当我们为string分配内存时,我们总是要多分配一个空间用来存放这个引用计数的值,只要发生拷贝构造可是赋值时,这个内存的值就会加一。而在内容修改时,string类为查看这个引用计数是否为0,如果不为零,表示有人在共享这块内存,那么自己需要先做一份拷贝,然后把引用计数减去一,再把数据拷贝过来。下面的几个程序片段说明了这两个动作:

 

 

   //构造函数(分存内存)

    string::string(const char* tmp)

{

    _len = strlen(tmp);

    _ptr = new char[_len+1+1];

    strcpy( _ptr, tmp );

    _ptr[_len+1]=0;  // 设置引用计数  

}

 

//拷贝构造(共享内存)

    string::string(const string& str)

    {

         if (*this != str){


...   下一页
    摘要: 无标题文档 用 wsad5.0和sqlserver2k采用meet-in-middle模式 开发cmp实体bean及其完整客户端 (上篇:cmp的开发) abnerchai( 柴政 ) 2004 年 6 月 说明: 在许多情况下,我们现在还常常使用 cmp 实体 bean ,而 ibm 的 websphere studio application developer5.0 (中文版)简称 wsad5 是我们常用的开发工具,同时,我们也常使用 ms sql......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE