18 houdy

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2w+

C++类对象创建过程揭密

介绍初看到这个题目,你可能会有些疑惑:C++类对象的创建还有什么好说的,不就是调用构造函数么?实际上情况并不是想象中的那么简单,大量的细节被隐藏或者被忽略了,而这些细节又是解决一些其他问题的关键,所以我们很有必要深入到这块"神秘"的区域,去探索鲜为人知的秘密。 分配空间(Allocation)创建C++类对象的第一步就是为其分配内存空间。对于全局对象,静态对象以及分配在栈区域内的对象,对它们的内存

2007-07-29 13:02:00

一次有意义的面向对象设计尝试

前言  上一周由于工作的需要,我尝试运用面向对象的设计思想来解决实际工作中遇到的一个设计问题。整个设计过程主要涉及到C++语言,OO编程思想,设计模式这三个方面的知识,是对我软件设计能力的一次综合考验。虽然最后由于种种原因,我的设计方案并没有获得采纳,但是这个并不重要,重要的是在整个设计过程中我自己思考过,并提出了我的方案,也就是说,我在这次设计过程中学到了很多。我决定把这次设计记录下来,一方面是

2007-07-21 14:17:00

Inside COM Object Model

前言C++对象模型经常会受到大家的关注,这个可以从论坛中大量的和C++对象模型有关的帖子就可以看出来,但是我却很少看到讨论COM组件模型的讨论和文章。我现在正在作一些和COM有关的工作,对这个问题也比较感兴趣,我就想自己写一篇关于这个主题的文章。本文的名字是借用一本非常著名的书的名字,那就是。选择这个名字是不是有借助这本书的名气"炒作"自己的嫌疑?呵呵,可能有一点吧。但是这决不是我使用这个名字的真

2007-05-12 11:27:00

Segment/Section/Virtual Memory/Page之间的区别

注:对于Segment,Section,Virtual Memory,Page这些词我们肯定不会陌生。但是在我们阅读一些书籍和文章的时候,不知道是那些作者的缘故还是自己的原因,我们不能正确区分他们之间的区别。我不得不承认,真要100%弄清楚这些概念并不是一件容易的事情,因为他们涉及到很多不同方面的内容(例如编译/连接,汇编,操作系统),同时这些内容本身就不太容易掌握。但是我想写这篇文章,一方面是为

2007-05-06 14:08:00

Merge Two Sorted Single-linke List

引言在解决某个算法问题的时候,我们经常会遇到这样的情况:单纯解决这个问题本身并不难,但是如果在解决问题的同时我们还需要考虑到时间复杂度和空间复杂度,这时候情况就显得稍微复杂一点。那么对于某个具体的问 题,我们如何才能设计出高效的算法呢?本文通过对一个具体问题的分析试图阐述一个这样的观点:对题目已知条件的充分挖掘和理解是设计出高效算法的前提。近日在CSDN上看到一个关于单链的算法题:       

2007-03-31 11:00:00

OpenCV1.0在VS下的安装和配置

  关于OpenCV在VS IDE下的安装和配置,一些热心的网友已经分享了它们的成功经验,这里有一篇很好的文章。这里我无意重复这些内容,我想强调的是,在配置OpenCV开发环境的时候,除了满足能够正常工作外,我们还可以从移植和维护的角度多考虑一下。我们可能需要注意以下几个方面的问题:  1. 配置的开发环境最好要独立于OpenCV的安装目录。设想这样的情况,我们需要将OpenCV工程转移到另外一台

2007-03-13 19:41:00

网络资源收集(02/12/2007-02/16/2007)

Windows NT 4.0在前一篇"网络资源收集"中我提到了Windows平台下的对象(Object)和句柄(Handle)的一些内容。从一些文章的内容中我发现Windows NT 内核从v4.0开始对用户对象(USER)和GDI对象做了重大的调整,即将用户对象和GDI对象移入到内核模式(Kernel Mode)中。这些发现激发了我对Windows NT Architecture的兴趣,也搜到了

2007-02-15 11:17:00

虚函数表放在哪里?

引言:近日CSDN的"C/C++语言"版的一个问题引起了我的注意:"请问虚函数表放在哪里?"。我也曾经思考过这个问题,零零散散也有一定的收获,这次正好趁这个机会把我对这一部分的理解整理一下。 首先值得声明的是,本文的编译环境是VS2002+WinXP。C++标准并没有对虚函数的实现作出任何的说明,甚至都没有提到虚函数的实现需要用虚表来实现,只不过主流的C++编译器的虚函数机制都是通过虚表来实现的,

2007-01-28 14:09:00

网络资源收集(01/15/2007-01/19/2007)

引子在日常的工作和学习中,随着了解的深入和涉猎的范围越来越广,不了解的内容越来越多。有些内容在工作中很少涉及,但是不能保证以后也用不上,这时候对知识的收集和整理就显得尤为重要。实际上,对知识的收集和整理也可以看作是工作的重要组成部分,我现在可以不太清楚某个方面的内容,但是不代表我永远不了解这样的内容,良好的信息整理工作可以使我很轻松的定位到我需要的内容,这样在实际工作中可以节省大量的时间,极大的提

2007-01-18 15:37:00

对单链(Single-Linked List)操作的思考

前言对于单链(single-linked list)的考察频繁的出现在各种各样的考试题和面试题中。这其中的原因,一方面是因为单链的使用相当广泛,更重要的是单链的使用非常灵活,某些单链的操作对程序员的算法分析能力和灵活思考能力有很高的要求。本文通过对几个有代表性的单链算法的分析试图寻找解决单链问题的"万能钥匙",最起码也为提供一个通用的思路。单链的特性在进入到具体的算法分析之前,我觉得有必要分析

2007-01-09 14:57:00

反转字符串中的单词(Reverse Words)

前言:在前面一篇文章中,我们在反转长度不等的两块连续内存块的算法的基础上推导出了反转长度不等的两块不连续内存块的算法。在本文中,我将使用前文分析的算法去解决一个更复杂的问题:反转字符串中的单词。引子话说有这样一道算法题:PROBLEM:Reverse WordsCOMMENT:Write a function that reverses the order of the words in a st

2006-12-16 11:43:00

交换两段不连续的内存块(Swap Nonadjacent Memory Blocks)

问题:如何交换两段不连续的内存块?分析篇这道题是编程珠玑,第二版>第二章后的一个习题。看过这本书的朋友一定会对书中第二章介绍的用来交换两段连续的内存块的"reversal algorithm"一定记忆犹新。"reversal algorithm"无论在时间复杂度还是在空间复杂度上都有良好的表现,更重要的是它的实现相当简单:1。假设有两段连续的内存块a和b;2。首先对内存块a进行反转:a = re

2006-12-10 14:55:00

透过汇编另眼看世界之类成员函数指针

前言:在CSDN论坛经常会看到一些关于类成员函数指针的问题,起初我并不在意,以为成员函数指针和普通的函数指针是一样的,没有什么太多需要讨论的。当我找来相关书籍查阅了一番以后,突然意识到我以前对成员函数指针的理解太过于幼稚和肤浅了,它即不像我以前认为的那样简单,它也不像我以前认为的那样"默默无闻"。强烈的求知欲促使我对成员函数进行进一步的学习并有了这篇文章。一。理论篇在进行深入学习和分析之前,还是先

2006-11-25 12:35:00

透过汇编另眼看世界之DLL导出函数调用

前言:我一直对DLL技术充满好奇,一方面是因为我对DLL的导入/导出机制还不是特别的了解,另一面是因为我发现:DLL技术在Windows平台下占有重要的地位,几乎所有的Win32 API都是以导出函数的形式存放于不同的DLL文件中,在DLL方面的学习是任何一个想深入研究Windows内部机制的Windows程序员都不可能回避的事实。我在查阅了大量的文章后,对DLL技术有了一定的了解,所以我写了这篇

2006-11-19 12:45:00

透过汇编另眼看世界之多继承下的虚函数函数调用

在我的前一篇文章"透过汇编另眼看世界之函数调用"中,我们通过汇编了解了虚函数调用的全部过程。在本文中我将分析多继承的情况下虚函数调用的情况。首先还是写一些简单的代码作为本文分析的例子代码: //the abstract base classclass IBase ...{public:    virtual void func1() = 0;    virtual void func2

2006-11-04 14:19:00

Windows下动态内存分配方式

这里的"动态内存"包含以下两个方面的内容:  1.内存。这里的"内存"指的是进程的虚拟内存空间。在Win32环境下,每一个进程拥有独立的,大小为4G(0x0000 0000 ~ 0xFFFF FFFF)的虚拟内存空间。  2.动态。这里的"动态"指的是进程虚拟内存空间中的动态内存区域。在一个进程的虚拟内存空间中,只有动态内存可以在运行是被应用程序自由的分配/使用/释放。在Win32环境下,我们

2006-10-21 13:36:00

透过汇编另眼看世界之函数调用

在我的另外一篇文章中 ,我提到了要通过汇编语言来分析虚函数调用的真相。我们现在就开始踏上这次艰辛却非常有意思的旅程。其他闲话少说,直接进入主题。本文中使用的C++代码:#include "stdafx.h"#include iostream>class CBase {public:    virtual void callMe();};class CDerived: public CBas

2006-10-15 09:45:00

抓虫记(1)

近日浏览CSDN时,看到了网友贴的一个关于百度面试题的帖子,其中有一道是改错题,实际上就是找出代码中可能存在的BUGs,这个题是这样的:下面这段代码是把中英文混合字符串(汉字用两个字节表示,特点是第一个字节的最高位为1)中的大写字母转化为小写字母,请找出其中的bug,注意各种异常情况。 for (char *piterator = szWord; *piterator != 0; pi

2006-09-24 15:06:00

Learn From Real Coding (1)

注:大学毕业后,我就进入到一家软件公司从事AutoCAD应用程序开发。在随后的日子里我想通过BLOG的方式记录下我在实际工作中学习到的东西(也就是人们常说的"经验",很宝贵的哟!),然后和大家分享我的经验,也希望能和大家对相关问题进行深入的讨论。写这些的另外的一个目的记录下我成长的历程。标题:Learn From Real Coding - 1关键词:C++中的函数重载和默认值摘要:函数重载和

2006-08-26 12:39:00

复杂表达式的执行步骤

近日在CSDN上闲逛的时候,注意到一个帖子:   ((*strDest++=*strSrc++)!=/0); 哪儿前辈可以解释下里面具体执行的步骤呢? 对于这样的表达式,我们通常会有这样三种看法:1.这种写法不但没有错误(当然也没有BUG),而且写法紧凑。2.这种写法虽然没有错误,但是不够直观,理解起来有点麻烦,可能还会导致理解错误。3.这种写法中存在未定义的地方,执行结果可能是错误的。粗略来

2006-08-20 10:12:00

查看更多

勋章 我的勋章
    暂无奖章