2007年10月09日

在vmware上装debian4,基本上都是默认安装,装完后发现不少问题:

首先,装linux本就为了在linux下做开发用,gcc当然是必须的了,但是发现默认安装下只有cpp可以用,

而且还是很多标准库和头文件都没装。所以自己先去apt-get instal libc-dev,结果不知道怎么回事死

活装不上。  去 gcc.gnu.org 下载了最新版压缩包,准备直接装最新gcc,结果configure通不过,找不到

cc或者gcc,汗!!!试了n次无果,只能重装debian,然后第一次登录后就直接apt-get install gcc,

找到最新版安装成功。再汗自己一个 -_-!!

 

接着想把自己windows系统上的一些文件传到这个系统上,所以apt-get install samba,顺利安装。安装

完毕后,smbpasswd -i xxx ,添加一个新用户,然后/etc/init.d/samba restart 。用gnome里的共享文

件夹建立共享目录,搞定。

 

再接着,把一些pdf传到了debian的共享目录,双击,哇卡卡卡,evince自动打开了pdf。哎~~怎么都是

乱码。。。-_- 。没办法,google…发现了xpdf,apt-get install xpdf。装完发现打开pdf还是乱码,

再google ,发现自己的/usr/share/xpdf/下少一个xpdf-chinese-simplified目录,于是google了一个压

缩包,下载,解压到/usr/share/xpdf下。然后把压缩包内的文件add-to-xpdfrc的内容copy

到/etc/xpdf/xpdfrc中,根据xpdf-chinese-simplified的放置路径修改里面的路径。修改完毕,打开,终

于能显示中文了。。。。^-^ 不过还有一部分有特殊字体的pdf文件显示不全,以后慢慢想办法吧。

期间,去adobe下了一个acrobat reader 7.0的rpm,发现debian先不能直接识别rpm格式,于是apt-get

install alien,然后alien -i xxx.rpm,装完后发现不能用。网上很多人说acroread即浪费资源,速度

慢而且不开源,都不喜欢,所以 俺也不喜欢。。。。。。

 

嘿嘿 ,这是今天的经历,环境有了,以后要好好学习了。。。。。 

2007年09月03日

正好用到这部分,就随便翻译了一下,翻得不好,并且没翻完,以后会补上,看到这篇东东的人不要笑我

异常处理:概述

 

异常一般在出现程序控制之外的状况时发生,如内存不足或者I/O错误,引起的程序执行不正常的时候。不正常的状况应该做抛出或者捕获异常处理。不正常的状况跟一般的错误状况(如函数执行错误但是返回的结果代码标识了一个错误)不同。例如,文件状态函数识别一个文件不存在就是一个普通的错误状况。对普通错误状况来说,检测错误代码并作出适当的响应即可。不正常的状况也跟错误的执行(例如,调用者在给函数传入参数时犯错或者在不适合的环境中调用函数)不同。对错误的执行错误来说,用assert检测输入的参数或其他可能出现问题的变量就可以。

VC++支持三种类型的异常处理:

.C++ exceptions

.Structured exception handling (SEH), used in C programs for Windows NT and Windows 95

.MFC exceptions

注意:自3.0版本依赖,MFC开始使用C++ Exception,但是仍然支持它那些老版本的异常处理宏。

使用建议
在MFC程序中,要使用C++ EXCEPTION;不要使用SEH。只在非MFC程序中使用SEH。不要把这两种方法混在一块。

What do you want to know more about?


什么时候选用哪种异常处理机制

VC++支持三种不同的错误处理机制。可以根据自己的情况选择其中的一种。

.C++ exceptions
在VC++,MFC中

.结构化异常处理 SEH
WIN NT提供自己的异常机制,称作结构化异常处理(SEH)。SEH不被推荐在C++或MFC编程中使用、

.MFC异常处理宏
自MFC 1.0版本以来,MFC就支持通过一系列宏来处理异常的机制。尽管在新的编程中不推荐使用这些宏,但是这些宏依然被支持向后兼容。在已经使用了宏的程序中,你也可以自由的使用C++ Exception。在预处理过程中,从VC++ 2.0版本以来,这些宏被认为是C++语言的VC++工具中定义的异常处理关键字。当你开始用c++ exceptions的时候,你可以不用管已经存在那些异常处理宏。


c++ exception

这个异常机制是C++语言的一部分
C++语言为处理异常情况,也就是程序执行过程中会发生的异常(),提供了内建的支持。利用C++异常处理程序可以把意外的事件传递到更高层的执行环境中,在这个环境中能更好的把那些不正常事件中恢复正常。这些异常会被常规控制流向的外面的代码里处理掉。

注意 在这些文章中,名词“结构化的异常处理”与“结构化异常”(或者叫C异常)仅仅指WINDOWS 95和NT提供的 WIN32 结构化异常处理机制。关于其他的异常处理(或者称为C++异常)是指C++异常处理机制。

注意 MFC现在使用 C++ 异常处理。老版本的MFC异处理宏,如果你还在使用它们,等同于C++ 异常关键字。不像WIN32 结构化异常处理机制,语言自身提供了对C++异常处理的支持。对C++编程来说,你更应该使用C++异常处理,而不是使用SEH。在C++程序中使用SEH,比使用C++异常处理,更能保证代码的可移植性。C++异常处理机制更灵活,使用它可以处理任何类型的异常。C的异常只有UNSIGNED INT类型。

.C++异常的使用

在C++中,引起异常的处理被称作抛出一个异常。接着一个指定的异常处理抓住这个被抛出的异常。为了能在你的代码中使用异常处理,在VC++ Studio中打开 “工程”设置对话框,选择"c/c++"标签,在类别框中选择 "C++ Language",并且选中 "Enable Exception Handling";或者使用 "/GX" 编译选项。默认为 "/GX-",它禁止异常处理。

注意 从4.0版本以来,MFC(包括VC++)就开始使用C++异常处理机制。尽管鼓励在新代码中使用C++异常处理。MFC 4.0版本和后来的版本都从保留了以前的版本中的宏,以使老的代码不会被破坏。宏和新的机制可以被很好的合并在一起。For information on mixing macros and C++ exception handling and onconverting old code to use the new mechanism, see the articles Exceptions: Macros and C++Exceptions, and Exceptions: Converting from MFC Exception Macros.

.Exception handling syntax 异常处理语法

C++异常处理的语法结构被表达如下:
try-block :
try compound-statement handler-list

handler-list :
handler handler-listopt

handler :
catch ( exception-declaration ) compound-statement

exception-declaration :
type-specifier-list declarator
type-specifier-list abstract-declarator
type-specifier-list

throw-expression :
throw assignment-expressionopt

try后面的代码组合是被监视的代码。“throw-expression”抛出一个异常。catch后面的代码组合示是异常处理,并且捕获被throw-expression抛出的异常。catch后面的exception-declaration语句识别处理的异常的类型。这些类型可以是任何有效的类型,包括C++类。 如果异常声明部分是(…),catch部分就是处理任何一种异常,包括系统产生的和程序产生的C异常。这些异常包括内存包括,被0除,浮点侵犯(??)。省略号的捕获处理对try部分来说一定要是最后一个处理。
throw的操作从句法上跟return很相似。

Microsoft Specific —>
微软C++不支持函数异常规范机制。
END Microsoft Specific

.Exception handling: default synchronous exception model

在VC++以前的版本中,C++异常处理机制缺省的支持异步(硬件)异常。在异步模型下,编译器架设任何命令都可以产生异常。
在新的同步异常模型下,现在默认的异常可以只通过throw来抛出。一次,编译器可以假设只有在throw的时候或者在函数调用的时候异常会发生。如果对象的生命周期没有与函数调用或者throw语句重叠,这个模型允许编译器去掉对当前展开对象的生命周期的追踪,并且可以相当大程度上的较少代码的大小。这两个异常处理模型,同步与异步,是完全兼容并且可以在一个应用中混合使用的。 使用同步模型捕获硬件异常也是有可能的。然而,如果编译器判定对同步模型来说不需要追踪这些展开对象的生命周期,那么这些函数中的展开对象可能会由于发生异常而未展开。

.Type-safe exception handling 类型安全的异常处理

C++异常处理支持类型安全异常处理。C异常总是被认为是一个unsigned int.使用c++异常处理,你可以指定一个特定类型的异常(包括c++对象)被一个符合被抛出异常类型的处理器捕获。

.C++ exception examples

C++异常处理的真正能力不仅表现在它处理各种类型的异常的能力上,还表现在他能在退栈时自动调用所用在异常被抛出前构造的所有本地对象的析构函数。throw与catch之间存在的上下文环境被称为“异常栈帧”。这个帧包含带有析构语法的对象。如果一个异常在监视部分的执行过程中或者被监视部分的常规调用中(直接或间接的)被抛出,一个异常对象就会在被throw操作数创建的对象处被创建(暗指一个复制构造函数被调用)。在这里,编译器在上一层能处理这种类型的抛出异常的执行环境中查找catch字句,或者查找能处理任何类型异常的catch处理程序。按照catch处理程序在try区块后面的顺序被检测。如果没有发现合适处理程序,就会检查上一层try区块,直到最外面的try区块被检测。如果依然没发现合适的处理程序,或者当在一个处理程序处理以前有异常发生,预先定义的运行时函数terminate就会被调用。 如果在抛出异常后有一个异常发生但是还没开始展开(unwind可理解为展开,开始执行),terminate函数被调用。你可以为处理某些状况定制终止函数。

下面的例子示范了使用带有析构语法的类的c++异常处理。
#include <iostream.h>

void MyFunc( void );

class CTest
{
public:
CTest(){};
~CTest(){};
const char *ShowReason() const { return "Exception in CTest class."; }

};

class CDtorDemo
{
public:
CDtorDemo();
~CDtorDemo();
};

CDtorDemo::CDtorDemo()
{
cout << "Constructing CDtorDemo." << endl;
}

CDtorDemo::~CDtorDemo()
{
cout << "Destructing CDtorDemo." << endl;
}

void MyFunc()
{

CDtorDemo D;
cout<< "In MyFunc(). Throwing CTest exception." << endl;
throw CTest();
}

int main()
{
cout << "In main." << endl;
try
{
cout << "In try block, calling MyFunc()." << endl;
MyFunc();
}
catch( CTest E )
{
cout << "In catch handler." << endl;
cout << "Caught CTest exception type: ";
cout << E.ShowReason() << endl;
}
catch( char *str )
{
cout << "Caught some other exception: " << str << endl;
}
cout << "Back in main. Execution resumes here." << endl;
return 0;

}

 

.Unhandled exceptions

如果一个异常没有发现一个合适的捕获处理程序,预先定义的 terminate 运行时函数就会被调用。(你可以在你的任何处理程序中显式的调用terminate)。terminate的默认动作就是调用aboirt。如果你想terminate调用程序中其他的函数,调用 set_terminate函数,把那个函数的名字和它的一个变量当作参数。你可以在你程序的任何地方调用 set_terminate.terminate通常调用最后一次给set_terminate做参数的的函数。

#include <eh.h> // For function prototypes
#include <iostream.h>
#include <process.h>

void term_func()
{
//…
cout << "term_func was called by terminate." << endl;
exit( -1 );
}
int main()
{
try
{
// …
set_terminate( term_func );
// …
throw "Out of memory!"; // No catch handler for this exception
}
catch( int )
{
cout << "Integer exception raised." << endl;
}
return 0;
}

 

.Order of handlers

.Mixing C and C++ exceptions

如果你想写出移植性更好的程序,不推荐你在C++程序中使用SEH。不过,有时候,你想把c与c++代码混在一起,需要一种灵活的手段来处理这两种异常。因为seh异常处理没有对象或者类型的概念,他不能处理被c++代码抛出的异常;然后,c++捕获处理程序可以处理c异常。从这方面说,c++异常处理语法(try,throw,cath)不会被c编译器接收,但是SEH语法(__try,__except,__finallu)可以被C++编译器支持。

如果你混合使用c和c++异常,注意下面几项:
1.c++异常和c异常不能在一个函数内混合使用。
2.终止处理程序(__finally区块)总会被执行,及时在一个异常被抛出后的展开(执行)期间。
3.在使用/GX编译选项编译的所有模块中,C++异常处理能捕获和保护展开的语义。(??)
4.可能在一些状况下所有对象的析构函数不会被调用。比如,当通过一个未初始化的函数指针去调用一个函数,并且把一个调用前构造的对象当作参数,这时会发生一个C异常,这些对象的析构函数不会在在退栈的时候被调用。

.Exception handling overhead

2007年08月23日

日前,在一段代码中调试中,发现对动态分配的内存进行释放时报错,

DAMAGE: after Normal block #293at 0xXXXXXXXX

代码大体如下:

…………………

         {

                   iarry=(MOBILE_INDEX**)malloc(days*sizeof(MOBILE_INDEX*));

                   isize=(unsigned long*)malloc(days*sizeof(unsigned long));

                   for(int i=0;i<=days;i++)

                   {

                            ……………………….

                            iarry[i]=LoadSuccessMobileIndex(iarry[i],&isize[i],tday,path);

                            size++;

                   }

         }

         FreeArray();

}

void CManMobileDlg::FreeArray()

{

         if(size>0)

         {

                   for(int i=0;i<size;i++)

                   {

                            //if(isize[i]>0)

                                     FreeMobileIndex(iarry[i]);

                            //free(iarry[i]);

                   }

                   free(iarry);

                   free(isize);                  

                   size=0;

         }

}      

大体意思是:先为指针数组动态分配一段空间,然后在循环内为每个指针数组元素分配内存空间,然后在操作完成后,通过自定义函数释放这些内存空间。

 

跟了好几次,百思不得其解,就GOOGLE一下,在VCKBASE.COM 找到了一篇文章,http://www.vckbase.com/document/finddoc.asp?keyword=%C9%FA%CB%C0%BD%AE%BD%E7 ,大受起码,也咬牙跟进了free函数内部。

的确,内存分配完毕后,内存分配机制会在分配的内存空间后部添加四个FD字节,以表示以上为用户的内存区域。

仔细比对了自己的内存区域,发现在四个FD字节之前,自己分配的内存空间竟然没有对齐,导致了有一个FD字节进入了用户内存区域,只剩余3FD字节来表示结束。所以,必然导致了free函数内CheckBytes函数检查分配的用户内存空间不正常,导致释放内存失败。

于是,在动态分配内存的时候,多分配了一个类型空间

iarry=(MOBILE_INDEX**)malloc((days+1)*sizeof(MOBILE_INDEX*));

isize=(unsigned long*)malloc((days+1)*sizeof(unsigned long));

试验后,运行正常,内存可以被正确释放,无泄漏。

 

2007年08月03日

最近做一个东东,把一些自定义的内存管理的方法封在了一个dll中,通过调用dll来进行内存的分配与释放。调试过程中发现通过dll来分配的内存无法在外部通过释放,在外部分配的内存通过dll内的释放函数也无法释放。

google一下发现有人说是因为dll里与exe里的内存管理机制是不一样的,可以通过GlobalAlloc来解决。

我的理解是在dll里分配的内存与在exe里的分配的内存都带有各自线程的私有化性质,可以相互读写,但是不能对其进行释放,应该算是线程安全吧。

补:

这几天又发现了一个问题,通过DLL的不同函数对内存分配,释放可以正常操作;但是如果通过一个函数分配内存,再试图通过另外一个函数来realloc内存的话会报错,不允许访问。

如果想正常realloc,则要保证malloc跟realloc在同一个函数内;释放可不在一个函数内。

2007年07月16日

["Superman" Lyrics by Goldfinger]

[So here I am
doing everything I can
holding on to what I am
pretending I'm a superman
I'm trying to keep
the ground on my feet
it seems the world's
falling down around me
the nights are all long
I'm singing this song
to try and make the answers more than maybe

and I'm so confused about what to do
sometimes I want to throw it all away

so here I am
growing older all the time
looking older all the time
feeling younger in my mind

and here I am, doing everything I can
holding on to what I am
pretending I'm a superman]

[Marissa Mayer] Google is a search engine, allows us to search the web, and it’s also a company that really focuses on innovative technologies and organizing the world’s information.

[I'm trying to sleep
I lost count of the sheep
my mind is racing faster every minute
what could I do more
yeah I'm really not sure]

[Marissa Mayer] When we say all the world’s information, we really do mean all, we’ve focus primarily today on web pages, but now our efforts are expanding into things like books, printed materials will be appearing in library, into videos, into a lot of different modes of medium that we think. Well we think we can help people organize information.

[Narrator] The Internet and World Wide Web have become part of our public and private lives. They now have over a billion users. Millions of pages of information from all over the world are available in our homes at a click of the mouse. How did it happen?

Vint Cerf is one of the Internet’s founders. In 2005, he started to work at Google.
[Interviewer] You’ve been named “the father of the Internet”?
[Vint Cerf] Yes, I’ve been named “the father of the Internet”, but it’s not accurate.
Bob Kahn and I did the design work in 1973, he really initiated the program at the Defense’s Advanced Research Projects Agency, so it’s fair to say that two of us had primary involvement in the creation of the Internet’s design. But after our first paper was published in 1974, there were just thousands of people involved in making this actually happen.

[Interviewer] Could you have a foresee at that time that the Internet will take such a fly?

[Vint Cerf]The technologies that we are very commonly familiar with today were visible to us in the course of this work, but could we have foreseen the side effect of a billion people, having access to this facility, pouring information into this, no, we couldn’t see that. People began to learn very quickly how to compose information that could be put into the World Wide Web. And now the question is how do I find it? Companies like Google and others that have found ways to index the entire Internet contribute to the utility of all that information going into this system.

[Narrator] In the mid 1990’s, many search engines were launched to help users find information on the Internet. About this time, two young men enrolled at the Stanford University, Larry Page and Sergey Brin. While the internet bubble burst around them and one company after another folded, they were developing the ultimate search engine. In 1999, with a starting capital of 100,000 dollars, they founded Google. When the company went public in 2004, they became overnight-billionaires. And Google, with over 6,700 employees, became the world’s fastest growing internet company.

[Marissa Mayer] Larry and Sergey, they didn’t actually want to ??? the company, they wanted to sell the search engine technology to existing company, and they went out to everyone, and everyone said, “Well, our search is at least 80% as good as next person’s, isn’t that good enough, hmm?“And Larry and Sergey said:” You know, no, ???? last 20% really does matter. And the fact that our search is noticeably better than everyone else’s will make a big difference.”

[Narrator] Two students who wanted to make the best search engine, that’s how Google started. But how does such a search engine work?

[Interviewer] What is behind that screen?

[Larry Page] Right, a ???? determine what we show and when we show it.
So, for example, if you were to do a ?? on the keyword “flowers”. You would see that the page pose up, I want to say that’s important about this pose up very quickly, so that’s always been a core thing of Google, we want to provide the best user experience, and if you have to wait for your search results a couple of seconds, that’s not a good experience. So page loads very quickly, and as you can see, we have sort of two areas on the page we have, and the organic search results which will show left, left hand side. And you have all of your advertising which you will see as, sometimes on the top results on the page, these are clearly marked in a different color, and we also have them on the right side of the page.

[Interviewer] Fully organic results?
[Larry Page] Hmm…
[Interviewer] The guy who ends up first is the happiest of all, I think.
[Larry Page] Obviously.
[Interviewer] So how does page rank work? How does it get that?
[Larry Page] We make page rank works as it looks at incoming links into websites. So essentially the idea is that if somebody has a website, say, buy flowers, and the website has become authority on the subject, and it’s likely that other people will have links pointing to that website because they feel there’s a lot of value on that website and something interesting there, so they make links to it. And by looking at all of these links coming in, we can then determine how valuable that page is. Now what we also do is we look at where do these links come from. For example, if somebody had a link from the newyorktimes.com to a website, then we understand that New York Times is more respectable than maybe my personal website, so that has bigger boost in the database your page will rank in the organic results.

[Narrator] The question is: “how is the choice made to rank the New York Times higher than a personal website, for instance.”

[Vint Cerf] There are mechanisms that we and others use to try to assess which information is thought to be the most relevant. After all the parties doing the search once information which is most relevant to the specific terms that have been used in the search query. Relevance in our world in part is conferred by knowing how many websites are pointing to a particular place, the more that point to a place with a hyperlink, the more likely it is that must be important information. So then you start ranking the importance of the places ??? by trying to see how many places point to them. It’s more complicated than that, but we ?? too much deep into this, it’s getting into the trade secrets of Google, which I don’t want to do. So we are confronted with this huge mass of information, we try to figure out what’s relevance based on ???. But in the end, each of us has to decide for ourselves what our reaction is to this information.

[Narrator] In 2005, Google had a gross turnover of 6.1 billion US dollars, and net profit of 1.5 billion.

[玛瑞莎·梅亚]Google是一个搜索引擎,我们用它来搜索网络;Google也是一家公司,它专注于技术创新和全球信息的整合。
没错,我们是指全球的所有信息。我们主要专注于网页的搜索,但我们同时在书籍等出现在图书馆的资源,视频和其它许多媒介上面下工夫。我们认为我们可以帮助人们整合信息。

[旁白] 因特网和全球信息网已经成为我们公共生活和私人生活的一部分。现在,有超过10亿人在使用网络。无数来自全球各地的信息只要在家轻点鼠标就可以得到。这是如何发生的?
温顿·瑟夫是因特网的创始人之一。2005年,他开始为Google工作。

[访问者] 你被称为“因特网之父”?
[温顿·瑟夫] 是的,我被称为“因特网之父”,但这并不准确。鲍伯·卡恩和我在1973年设计了因特网,其实他在美国国防部高级研究计划局的时候就开始这项研究。所以说我们俩是因特网创立早期的参与者,这并不过分。但在1974年我们的第一篇论文发表之后,许多人都参与了进来,才有今天的成就。

[访问者] 你们在当时有没有预见到因特网会有今天这样巨大的发展?
[温顿·瑟夫] 今天我们非常熟悉的技术从当时的工作进展中可以窥见端倪,但数以亿计的人加入到网络中,并给因特网注入如此海量的信息,这是我们当时无法预见的。人们很快学会如何将信息加入到因特网中,现在的问题是我们如何才能找到所需的信息?像Google这样可以为整个因特网编制索引的公司为提高进入网络信息的利用率做出了贡献。

[旁白] 在20世纪90年代中期,为了帮助用户找到所需的信息,许多公司推出了搜索引擎产品。大约在那个时候,名叫拉里·佩奇和赛吉·布林的两个年轻人刚进入斯坦福大学。当网络泡沫破裂,许多公司倒闭的时候,他们在研究最好的搜索引擎。1999年,他们用100,000美元作为启动资金成立了Google公司。当2004年公司上市的时候,他们转眼间成了亿万富翁。而有着6700名员工的Google,成为了全球成长最快的网络公司。

[玛瑞莎·梅亚] 拉里和赛吉他们开始并没有打算成立公司,他们只是想把搜索技术卖给现有的公司。当他们找别人谈及他们的想法时,每个人都说:“我们的搜索至少有后来者的80%那么好,这还不够吗?”拉里和赛吉说:“你知道,当然不够好,这最后的20%非常重要。而且我们的搜索引擎很明显要比别人的强大,这一点会是巨大的优势。”

[旁白] 两个学生想做最好的搜索引擎,这就是Google成立的原因。不过,这样一个搜索引擎是如何工作的?

[访问者] 在搜索引擎的页面背后,它是如何工作的?
[拉里·佩奇] 是的,一种???决定了搜索引擎显示什么结果以及什么时候显示。比如说,如果你想搜索一个关键词“花”。你看到搜索页面显示出来了,我想说页面的快速载入非常重要,这一直Google的一项核心优势,我们希望为用户有愉快的搜索体验,如果你要为你的搜索结果等上数秒,这不会是一项愉快的体验。所以页面载入非常快。正如你看到的,我们在搜索结果页面上大致有两个区域,在左边,是自然搜索结果,同时你能看到所有的广告。有时候,在页面的顶部,广告会用不同的颜色清楚地标示出来,在页面的右边又可以看到广告。

[访问者] 完全自然(无人工干涉)的搜索结果?
[拉里·佩奇] 对。
[访问者] 那排在搜索结果第一位的一定最高兴了。
[拉里·佩奇] 很明显,是这样的。
[访问者] 那“网页排名”技术是如何实现的?它如何得出这样一个搜索结果?
[拉里·佩奇] 我们的网页排名技术会观察网站的导入链接。所以本质上,“页面排名”技术就是这样:比如说,一个人有一个卖花的网站,如果这个网站在这个领域是权威,那么就很可能会有许多人将链接指向这个网站,因为他们觉得这个网站很有价值,或者这个网站上有他们感兴趣的东西,所以他们才会把链接指向这个网站。因此,通过观察导入链接的数量,我们就可以知道这个网页有多重要。而且我们同时会关注这些链接来自哪里。比如,一个网站有一个来自newyorktimes.com的链接,而我们知道,《纽约时报》网站比我的个人网站要更权威一些,所以这会对你的网页在数据库中的排名更加靠前。

[旁白] 问题是:“我们怎么知道《纽约时报》网站比个人网站要更权威一些呢?”
[温顿·瑟夫] 我们和其它一些搜索引擎通过一些方法来评估哪些信息被认为是与关键词最相关的。许多人在使用搜索引擎的时候选择了与他们在搜索栏中的关键词最相关的词。在我们的理解中,重要性的大小在一定程度上是与链接到这个地方的超级链接多少相关的。指向这个地方的超级链接越多,这个信息就越有可能是重要的。所以当你为许多网页排序的时候,需要观察这些网页的导入链接。引擎的实际工作原理比这个复杂一些,但我们不再深入,因为我不想涉及到商业秘密。面对海量的信息,试图找出对用户重要的信息。但最后仍然要用户自己决定哪些信息才是他想要的。

[旁白] 2005年,Google总营业额达到61亿美元,净利润达15亿美元。

2007年05月11日

首先需要借助jdk的工具keytool来生成证书,

命令如下:keytool -genkey -alias tomcat -keyalg RSA,
其中-alias 后面的 "tomcat" 可以自己设置。

根据提示依次填写密码,姓、组织、名称等信息。其中第一次输入的密码要跟最后一次生成一致。
最后生成的认证文件.keystore会存储在用户在windows系统的home目录下 例如:E:\Documents and Settings\duwb\。

然后我们进入tomcat的conf目录,修改server.xml文件。

找到Connector标记,根据下面的例子修改成如下式样:

<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

如果生成证书时设置密码跟TOMCAT主密码相同为:changeit,则配置时不需指名密码
否则需要用keystorePass=指明密码。

2007年04月09日

词法分析:

参照正则表达式表示方法,对内存中的字符串进行词法分析。
1、词法模板:词法分析匹配模式


以\^开头表示分词开始;之后固定字节匹配用(….)表示;{..}表示重复次数;以

[....]表示通配项目;以^\表示结束。

2.通配项:


w :表示小写字母
W :表示大写字母
Z :表示汉字
n :表示数字0-9
其他特殊符号参见C语言转义符

3.重复匹配表示

{n} :表示重复多少次
{+} :表示一次
{*} :表示多次直到不匹配

2007年03月27日

 核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。

  为了便于CPU设计、生产、销售的管理,CPU制造商会对各种CPU核心给出相应的代号,这也就是所谓的CPU核心类型。

  不同的CPU(不同系列或同一系列)都会有不同的核心类型(例如Pentium 4的Northwood,Willamette以及K6-2的CXT和K6-2+的ST-50等等),甚至同一种核心都会有不同版本的类型(例如Northwood核心就分为B0和C1等版本),核心版本的变更是为了修正上一版存在的一些错误,并提升一定的性能,而这些变化普通消费者是很少去注意的。每一种核心类型都有其相应的制造工艺(例如0.25um、0.18um、0.13um以及0.09um等)、核心面积(这是决定CPU成本的关键因素,成本与核心面积基本上成正比)、核心电压、电流大小、晶体管数量、各级缓存的大小、主频范围、流水线架构和支持的指令集(这两点是决定CPU实际性能和工作效率的关键因素)、功耗和发热量的大小、封装方式(例如S.E.P、PGA、FC-PGA、FC-PGA2等等)、接口类型(例如Socket 370,Socket A,Socket 478,Socket T,Slot 1、Socket 940等等)、前端总线频率(FSB)等等。因此,核心类型在某种程度上决定了CPU的工作性能。

  一般说来,新的核心类型往往比老的核心类型具有更好的性能(例如同频的Northwood核心Pentium 4 1.8A GHz就要比Willamette核心的Pentium  4 1.8GHz性能要高),但这也不是绝对的,这种情况一般发生在新核心类型刚推出时,由于技术不完善或新的架构和制造工艺不成熟等原因,可能会导致新的核心类型的性能反而还不如老的核心类型的性能。例如,早期Willamette核心Socket 423接口的Pentium 4的实际性能不如Socket 370接口的Tualatin核心的Pentium III和赛扬,现在的低频Prescott核心Pentium 4的实际性能不如同频的Northwood核心Pentium 4等等,但随着技术的进步以及CPU制造商对新核心的不断改进和完善,新核心的中后期产品的性能必然会超越老核心产品。

  CPU核心的发展方向是更低的电压、更低的功耗、更先进的制造工艺、集成更多的晶体管、更小的核心面积(这会降低CPU的生产成本从而最终会降低CPU的销售价格)、更先进的流水线架构和更多的指令集、更高的前端总线频率、集成更多的功能(例如集成内存控制器等等)以及双核心和多核心(也就是1个CPU内部有2个或更多个核心)等。CPU核心的进步对普通消费者而言,最有意义的就是能以更低的价格买到性能更强的CPU。

  在CPU漫长的历史中伴随着纷繁复杂的CPU核心类型,以下分别就Intel CPU和AMD CPU的主流核心类型作一个简介。主流核心类型介绍(仅限于台式机CPU,不包括笔记本CPU和服务器/工作站CPU,而且不包括比较老的核心类型)。

   INTEL CPU的核心类型

    Northwood
  这是目前主流的Pentium 4和赛扬所采用的核心,其与Willamette核心最大的改进是采用了0.13um制造工艺,并都采用Socket 478接口,核心电压1.5V左右,二级缓存分别为128KB(赛扬)和512KB(Pentium 4),前端总线频率分别为400/533/800MHz(赛扬都只有400MHz),主频范围分别为2.0GHz到2.8GHz(赛扬),1.6GHz到2.6GHz(400MHz FSB Pentium 4),2.26GHz到3.06GHz(533MHz FSB Pentium 4)和2.4GHz到3.4GHz(800MHz FSB Pentium 4),并且3.06GHz Pentium 4和所有的800MHz Pentium 4都支持超线程技术(Hyper-Threading Technology),封装方式采用PPGA FC-PGA2和PPGA。按照Intel的规划,Northwood核心会很快被Prescott核心所取代。

    Prescott
  这是Intel最新的CPU核心,目前还只有Pentium 4而没有低端的赛扬采用,其与Northwood最大的区别是采用了0.09um制造工艺和更多的流水线结构,初期采用Socket 478接口,以后会全部转到LGA 775接口,核心电压1.25-1.525V,前端总线频率为533MHz(不支持超线程技术)和800MHz(支持超线程技术),主频分别为533MHz FSB的2.4GHz和2.8GHz以及800MHz FSB的2.8GHz、3.0GHz、3.2GHz和3.4GHz,其与Northwood相比,其L1 数据缓存从8KB增加到16KB,而L2缓存则从512KB增加到1MB,封装方式采用PPGA。按照Intel的规划,Prescott核心会很快取代Northwood核心并且很快就会推出Prescott核心533MHz FSB的赛扬。

Smithfield
    这是Intel公司的第一款双核心处理器的核心类型,于2005年4月发布,基本上可以认为Smithfield核心是简单的将两个Prescott核心松散地耦合在一起的产物,这是基于独立缓存的松散型耦合方案,其优点是技术简单,缺点是性能不够理想。目前Pentium D 8XX系列以及Pentium EE 8XX系列采用此核心。Smithfield核心采用90nm制造工艺,全部采用Socket 775接口,核心电压1.3V左右,封装方式都采用PLGA,都支持硬件防病毒技术EDB和64位技术EM64T,并且除了Pentium D 8X5和Pentium D 820之外都支持节能省电技术EIST。前端总线频率是533MHz(Pentium D 8X5)和800MHz(Pentium D 8X0和Pentium EE 8XX),主频范围从2.66GHz到3.2GHz(Pentium D)、3.2GHz(Pentium EE)。Pentium EE和Pentium D的最大区别就是Pentium EE支持超线程技术而Pentium D则不支持。Smithfield核心的两个核心分别具有1MB的二级缓存,在CPU内部两个核心是互相隔绝的,其缓存数据的同步是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的,所以其数据延迟问题比较严重,性能并不尽如人意。按照Intel的规划,Smithfield核心将会很快被Presler核心取代。

Cedar Mill
    这是Pentium 4 6X1系列和Celeron D 3X2/3X6系列采用的核心,从2005末开始出现。其与Prescott核心最大的区别是采用了65nm制造工艺,其它方面则变化不大,基本上可以认为是Prescott核心的65nm制程版本。Cedar Mill核心全部采用Socket 775接口,核心电压1.3V左右,封装方式采用PLGA。其中,Pentium 4全部都为800MHz FSB、2MB二级缓存,都支持超线程技术、硬件防病毒技术EDB、节能省电技术EIST以及64位技术EM64T;而Celeron D则是533MHz FSB、512KB二级缓存,支持硬件防病毒技术EDB和64位技术EM64T,不支持超线程技术以及节能省电技术EIST。Cedar Mill核心也是Intel处理器在NetBurst架构上的最后一款单核心处理器的核心类型,按照Intel的规划,Cedar Mill核心将逐渐被Core架构的Conroe核心所取代。

Presler
    这是Pentium D 9XX和Pentium EE 9XX采用的核心,Intel于2005年末推出。基本上可以认为Presler核心是简单的将两个Cedar Mill核心松散地耦合在一起的产物,是基于独立缓存的松散型耦合方案,其优点是技术简单,缺点是性能不够理想。Presler核心采用65nm制造工艺,全部采用Socket 775接口,核心电压1.3V左右,封装方式都采用PLGA,都支持硬件防病毒技术EDB、节能省电技术EIST和64位技术EM64T,并且除了Pentium D 9X5之外都支持虚拟化技术Intel VT。前端总线频率是800MHz(Pentium D)和1066MHz(Pentium EE)。与Smithfield核心类似,Pentium EE和Pentium D的最大区别就是Pentium EE支持超线程技术而Pentium D则不支持,并且两个核心分别具有2MB的二级缓存。在CPU内部两个核心是互相隔绝的,其缓存数据的同步同样是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的,所以其数据延迟问题同样比较严重,性能同样并不尽如人意。Presler核心与Smithfield核心相比,除了采用65nm制程、每个核心的二级缓存增加到2MB和增加了对虚拟化技术的支持之外,在技术上几乎没有什么创新,基本上可以认为是Smithfield核心的65nm制程版本。Presler核心也是Intel处理器在NetBurst架构上的最后一款双核心处理器的核心类型,可以说是在NetBurst被抛弃之前的最后绝唱,以后Intel桌面处理器全部转移到Core架构。按照Intel的规划,Presler核心从2006年第三季度开始将逐渐被Core架构的Conroe核心所取代。

Yonah
    目前采用Yonah核心CPU的有双核心的Core Duo和单核心的Core Solo,另外Celeron M也采用了此核心,Yonah是Intel于2006年初推出的。这是一种单/双核心处理器的核心类型,其在应用方面的特点是具有很大的灵活性,既可用于桌面平台,也可用于移动平台;既可用于双核心,也可用于单核心。Yonah核心来源于移动平台上大名鼎鼎的处理器Pentium M的优秀架构,具有流水线级数少、执行效率高、性能强大以及功耗低等等优点。Yonah核心采用65nm制造工艺,核心电压依版本不同在1.1V-1.3V左右,封装方式采用PPGA,接口类型是改良了的新版Socket 478接口(与以前台式机的Socket 478并不兼容)。在前端总线频率方面,目前Core Duo和Core Solo都是667MHz,而Yonah核心Celeron M是533MHz。在二级缓存方面,目前Core Duo和Core Solo都是2MB,而即Yonah核心Celeron M是1MB。Yonah核心都支持硬件防病毒技术EDB以及节能省电技术EIST,并且多数型号支持虚拟化技术Intel VT。但其最大的遗憾是不支持64位技术,仅仅只是32位的处理器。值得注意的是,对于双核心的Core Duo而言,其具有的2MB二级缓存在架构上不同于目前所有X86处理器,其它的所有X86处理器都是每个核心独立具有二级缓存,而Core Duo的Yonah核心则是采用了与IBM的多核心处理器类似的缓存方案—-两个核心共享2MB的二级缓存!共享式的二级缓存配合Intel的“Smart cache”共享缓存技术,实现了真正意义上的缓存数据同步,大幅度降低了数据延迟,减少了对前端总线的占用。这才是严格意义上的真正的双核心处理器!Yonah核心是共享缓存的紧密型耦合方案,其优点是性能理想,缺点是技术比较复杂。不过,按照Intel的规划,以后Intel各个平台的处理器都将会全部转移到Core架构,Yonah核心其实也只是一个过渡的核心类型,从2006年第三季度开始,其在桌面平台上将会被Conroe核心取代,而在移动平台上则会被Merom核心所取代。

Conroe
    这是更新的Intel桌面平台双核心处理器的核心类型,其名称来源于美国德克萨斯州的小城市“Conroe”。Conroe核心于2006年7月27日正式发布,是全新的Core(酷睿)微架构(Core Micro-Architecture)应用在桌面平台上的第一种CPU核心。目前采用此核心的有Core 2 Duo E6×00系列和Core 2 Extreme X6×00系列。与上代采用NetBurst微架构的Pentium D和Pentium EE相比,Conroe核心具有流水线级数少、执行效率高、性能强大以及功耗低等等优点。Conroe核心采用65nm制造工艺,核心电压为1.3V左右,封装方式采用PLGA,接口类型仍然是传统的Socket 775。在前端总线频率方面,目前Core 2 Duo和Core 2 Extreme都是1066MHz,而顶级的Core 2 Extreme将会升级到1333MHz;在一级缓存方面,每个核心都具有32KB的数据缓存和32KB的指令缓存,并且两个核心的一级数据缓存之间可以直接交换数据;在二级缓存方面,Conroe核心都是两个内核共享4MB。Conroe核心都支持硬件防病毒技术EDB、节能省电技术EIST和64位技术EM64T以及虚拟化技术Intel VT。与Yonah核心的缓存机制类似,Conroe核心的二级缓存仍然是两个核心共享,并通过改良了的Intel Advanced Smart Cache(英特尔高级智能高速缓存)共享缓存技术来实现缓存数据的同步。Conroe核心是目前最先进的桌面平台处理器核心,在高性能和低功耗上找到了一个很好的平衡点,全面压倒了目前的所有桌面平台双核心处理器,加之又拥有非常不错的超频能力,确实是目前最强劲的台式机CPU核心。

Allendale
    这是与Conroe同时发布的Intel桌面平台双核心处理器的核心类型,其名称来源于美国加利福尼亚州南部的小城市“Allendale”。Allendale核心于2006年7月27日正式发布,仍然基于全新的Core(酷睿)微架构,目前采用此核心的有1066MHz FSB的Core 2 Duo E6×00系列,即将发布的还有800MHz FSB的Core 2 Duo E4×00系列。Allendale核心的二级缓存机制与Conroe核心相同,但共享式二级缓存被削减至2MB。Allendale核心仍然采用65nm制造工艺,核心电压为1.3V左右,封装方式采用PLGA,接口类型仍然是传统的Socket 775,并且仍然支持硬件防病毒技术EDB、节能省电技术EIST和64位技术EM64T以及虚拟化技术Intel VT。除了共享式二级缓存被削减到2MB以及二级缓存是8路64Byte而非Conroe核心的16路64Byte之外,Allendale核心与Conroe核心几乎完全一样,可以说就是Conroe核心的简化版。当然由于二级缓存上的差异,在频率相同的情况下Allendale核心性能会稍逊于Conroe核心。

Merom
    这是与Conroe同时发布的Intel移动平台双核心处理器的核心类型,其名称来源于以色列境内约旦河旁边的一个湖泊“Merom”。Merom核心于2006年7月27日正式发布,仍然基于全新的Core(酷睿)微架构,这也是Intel全平台(台式机、笔记本和服务器)处理器首次采用相同的微架构设计,目前采用此核心的有667MHz FSB的Core 2 Duo T7×00系列和Core 2 Duo T5×00系列。与桌面版的Conroe核心类似,Merom核心仍然采用65nm制造工艺,核心电压为1.3V左右,封装方式采用PPGA,接口类型仍然是与Yonah核心Core Duo和Core Solo兼容的改良了的新版Socket 478接口(与以前台式机的Socket 478并不兼容)或Socket 479接口,仍然采用Socket 479插槽。Merom核心同样支持硬件防病毒技术EDB、节能省电技术EIST和64位技术EM64T以及虚拟化技术Intel VT。Merom核心的二级缓存机制也与Conroe核心相同,Core 2 Duo T7×00系列的共享式二级缓存为4MB,而Core 2 Duo T5×00系列的共享式二级缓存为2MB。Merom核心的主要技术特性与Conroe核心几乎完全相同,只是在Conroe核心的基础上利用多种手段加强了功耗控制,使其TDP功耗几乎只有Conroe核心的一半左右,以满足移动平台的节电需求。

    AMD CPU的核心类型

    Athlon XP的核心类型
  Athlon XP有4种不同的核心类型,但都有共同之处:都采用Socket A接口而且都采用PR标称值标注。

    Thorton
  采用0.13um制造工艺,核心电压1.65V左右,二级缓存为256KB,封装方式采用OPGA,前端总线频率为333MHz。可以看作是屏蔽了一半二级缓存的Barton。

    Barton
  采用0.13um制造工艺,核心电压1.65V左右,二级缓存为512KB,封装方式采用OPGA,前端总线频率为333MHz和400MHz。

    新Duron的核心类型
    AppleBred
  采用0.13um制造工艺,核心电压1.5V左右,二级缓存为64KB,封装方式采用OPGA,前端总线频率为266MHz。没有采用PR标称值标注而以实际频率标注,有1.4GHz、1.6GHz和1.8GHz三种。

     Athlon 64系列CPU的核心类型

Clawhammer
  采用0.13um制造工艺,核心电压1.5V左右,二级缓存为1MB,封装方式采用mPGA,采用Hyper Transport总线,内置1个128bit的内存控制器。采用Socket 754、Socket 940和Socket 939接口。

Newcastle
  其与Clawhammer的最主要区别就是二级缓存降为512KB(这也是AMD为了市场需要和加快推广64位CPU而采取的相对低价政策的结果),其它性能基本相同。

Wincheste
    Wincheste是比较新的AMD Athlon 64CPU核心,是64位CPU,一般为939接口,0.09微米制造工艺。这种核心使用200MHz外频,支持1GHyperTransprot总线,512K二级缓存,性价比较好。Wincheste集成双通道内存控制器,支持双通道DDR内存,由于使用新的工艺,Wincheste的发热量比旧的Athlon小,性能也有所提升。

Troy
    Troy是AMD第一个使用90nm制造工艺的Opteron核心。Troy核心是在Sledgehammer基础上增添了多项新技术而来的,通常为940针脚,拥有128K一级缓存和1MB (1,024 KB)二级缓存。同样使用200MHz外频,支持1GHyperTransprot总线,集成了内存控制器,支持双通道DDR400内存,并且可以支持ECC 内存。此外,Troy核心还提供了对SSE-3的支持,和Intel的Xeon相同,总的来说,Troy是一款不错的CPU核心。

Venice
    Venice核心是在Wincheste核心的基础上演变而来,其技术参数和Wincheste基本相同:一样基于X86-64架构、整合双通道内存控制器、512KB L2缓存、90nm制造工艺、200MHz外频,支持1GHyperTransprot总线。Venice的变化主要有三方面:一是使用了Dual Stress Liner (简称DSL)技术,可以将半导体晶体管的响应速度提高24%,这样是CPU有更大的频率空间,更容易超频;二是提供了对SSE-3的支持,和Intel的CPU相同;三是进一步改良了内存控制器,一定程度上增加处理器的性能,更主要的是增加内存控制器对不同DIMM模块和不同配置的兼容性。此外Venice核心还使用了动态电压,不同的CPU可能会有不同的电压。

SanDiego
    SanDiego核心与Venice一样是在Wincheste核心的基础上演变而来,其技术参数和Venice非常接近,Venice拥有的新技术、新功能,SanDiego核心一样拥有。不过AMD公司将SanDiego核心定位到顶级Athlon 64处理器之上,甚至用于服务器CPU。可以将SanDiego看作是Venice核心的高级版本,只不过缓存容量由512KB提升到了1MB。当然由于L2缓存增加,SanDiego核心的内核尺寸也有所增加,从Venice核心的84平方毫米增加到115平方毫米,当然价格也更高昂。

Orleans
    这是2006年5月底发布的第一种Socket AM2接口单核心Athlon 64的核心类型,其名称来源于法国城市奥尔良(Orleans)。Manila核心定位于桌面中端处理器,采用90nm制造工艺,支持虚拟化技术AMD VT,仍然采用1000MHz的HyperTransport总线,二级缓存为512KB,最大亮点是支持双通道DDR2 667内存,这是其与只支持单通道DDR 400内存的Socket 754接口Athlon 64和只支持双通道DDR 400内存的Socket 939接口Athlon 64的最大区别。Orleans核心Athlon 64同样也分为TDP功耗62W的标准版(核心电压1.35V左右)和TDP功耗35W的超低功耗版(核心电压1.25V左右)。除了支持双通道DDR2内存以及支持虚拟化技术之外,Orleans核心Athlon 64相对于以前的Socket 754接口和Socket 940接口的Athlon 64并无架构上的改变,性能并无多少出彩之处。

闪龙系列CPU的核心类型

Paris
    Paris核心是Barton核心的继任者,主要用于AMD的闪龙,早期的754接口闪龙部分使用Paris核心。Paris采用90nm制造工艺,支持iSSE2指令集,一般为256K二级缓存,200MHz外频。Paris核心是32位CPU,来源于K8核心,因此也具备了内存控制单元。CPU内建内存控制器的主要优点在于内存控制器可以以CPU频率运行,比起传统上位于北桥的内存控制器有更小的延时。使用Paris核心的闪龙与Socket A接口闪龙CPU相比,性能得到明显提升。

Palermo
    Palermo核心目前主要用于AMD的闪龙CPU,使用Socket 754接口、90nm制造工艺,1.4V左右电压,200MHz外频,128K或者256K二级缓存。Palermo核心源于K8的Wincheste核心,新的E6步进版本已经支持64位。除了拥有与AMD高端处理器相同的内部架构,还具备了EVP、Cool‘n’Quiet;和HyperTransport等AMD独有的技术,为广大用户带来更“冷静”、更高计算能力的优秀处理器。由于脱胎与ATHLON64处理器,所以Palermo同样具备了内存控制单元。CPU内建内存控制器的主要优点在于内存控制器可以以CPU频率运行,比起传统上位于北桥的内存控制器有更小的延时。

Manila
    这是2006年5月底发布的第一种Socket AM2接口Sempron的核心类型,其名称来源于菲律宾首都马尼拉(Manila)。Manila核心定位于桌面低端处理器,采用90nm制造工艺,不支持虚拟化技术AMD VT,仍然采用800MHz的HyperTransport总线,二级缓存为256KB或128KB,最大亮点是支持双通道DDR2 667内存,这是其与只支持单通道DDR 400内存的Socket 754接口Sempron的最大区别。Manila核心Sempron分为TDP功耗62W的标准版(核心电压1.35V左右)和TDP功耗35W的超低功耗版(核心电压1.25V左右)。除了支持双通道DDR2之外,Manila核心Sempron相对于以前的Socket 754接口Sempron并无架构上的改变,性能并无多少出彩之处。

 

Athlon 64 X2系列双核心CPU的核心类型 

Manchester

    这是AMD于2005年4月发布的在桌面平台上的第一款双核心处理器的核心类型,是在Venice核心的基础上演变而来,基本上可以看作是两个Venice核心耦合在一起,只不过协作程度比较紧密罢了,这是基于独立缓存的紧密型耦合方案,其优点是技术简单,缺点是性能仍然不够理想。Manchester核心采用90nm制造工艺,整合双通道内存控制器,支持1000MHz的HyperTransprot总线,全部采用Socket 939接口。Manchester核心的两个内核都独立拥有512KB的二级缓存,但与Intel的Smithfield核心和Presler核心的缓存数据同步要依靠主板北桥芯片上的仲裁单元通过前端总线传输方式大为不同的是,Manchester核心中两个内核的协作程度相当紧密,其缓存数据同步是依靠CPU内置的SRI(System Request Interface,系统请求接口)控制,传输在CPU内部即可实现。这样一来,不但CPU资源占用很小,而且不必占用内存总线资源,数据延迟也比Intel的Smithfield核心和Presler核心大为减少,协作效率明显胜过这两种核心。不过,由于Manchester核心仍然是两个内核的缓存相互独立,从架构上来看也明显不如以Yonah核心为代表的Intel的共享缓存技术Smart Cache。当然,共享缓存技术需要重新设计整个CPU架构,其难度要比把两个核心简单地耦合在一起要困难得多。

Toledo
    这是AMD于2005年4月在桌面平台上的新款高端双核心处理器的核心类型,它和Manchester核心非常相似,差别在于二级缓存不同。Toledo是在San Diego核心的基础上演变而来,基本上可以看作是两个San diego核心简单地耦合在一起,只不过协作程度比较紧密罢了,这是基于独立缓存的紧密型耦合方案,其优点是技术简单,缺点是性能仍然不够理想。Toledo核心采用90nm制造工艺,整合双通道内存控制器,支持1000MHz的HyperTransprot总线,全部采用Socket 939接口。Toledo核心的两个内核都独立拥有1MB的二级缓存,与Manchester核心相同的是,其缓存数据同步也是通过SRI在CPU内部传输的。Toledo核心与Manchester核心相比,除了每个内核的二级缓存增加到1MB之外,其它都完全相同,可以看作是Manchester核心的高级版。

Windsor
    这是2006年5月底发布的第一种Socket AM2接口双核心Athlon 64 X2和Athlon 64 FX的核心类型,其名称来源于英国地名温莎(Windsor)。Windsor核心定位于桌面高端处理器,采用90nm制造工艺,支持虚拟化技术AMD VT,仍然采用1000MHz的HyperTransport总线,二级缓存方面Windsor核心的两个内核仍然采用独立式二级缓存,Athlon 64 X2每核心为512KB或1024KB,Athlon 64 FX每核心为1024KB。Windsor核心的最大亮点是支持双通道DDR2 800内存,这是其与只支持双通道DDR 400内存的Socket 939接口Athlon 64 X2和Athlon 64 FX的最大区别。Windsor核心Athlon 64 FX目前只有FX-62这一款产品,其TDP功耗高达125W;而Athlon 64 X2则分为TDP功耗89W的标准版(核心电压1.35V左右)、TDP功耗65W的低功耗版(核心电压1.25V左右)和TDP功耗35W的超低功耗版(核心电压1.05V左右)。Windsor核心的缓存数据同步仍然是依靠CPU内置的SRI(System request interface,系统请求接口)传输在CPU内部实现,除了支持双通道DDR2内存以及支持虚拟化技术之外,相对于以前的Socket 939接口Athlon 64 X2和双核心Athlon 64 FX并无架构上的改变,性能并无多少出彩之处,其性能仍然不敌Intel即将于2006年7月底发布的Conroe核心Core 2 Duo和Core 2 Extreme。而且AMD从降低成本以提高竞争力方面考虑,除了Athlon 64 FX之外,已经决定停产具有1024KBx2二级缓存的所有Athlon 64 X2,只保留具有512KBx2二级缓存的Athlon 64 X2。

相关术语

什么是酷睿 什么是扣肉 什么是双核处理器 什么是64位技术
CPU二级缓存 CPU封装技术 多媒体指令集 什么是AM2处理器
什么是CPU主频 什么是前端总线 CPU核心类型 CPU接口类型
2007年03月15日

转过年来时间不短了,那个文本数据处理的小东东断断续续的完善了一下代码,基本上能够用了。

核心的功能(数据内存映像,内建索引)都已经完成,就是扩展性有待提高。暂时做了两个功能,两列数据比较和单列数据过滤重复,那几十万数据测试了一下,速度还不错。

软件的性能受文本数据行数的影响大,行的长度对它影响不大,不过行长不能超过1500个字节,拆分后单列不能超过160个字节,今后会完善成可调的。

以后会优化检索方式,添加、完善这个东东的功能。

呵呵,心血来潮申请了免费空间,把这个东东挂上去,谁愿意测试就帮忙测试一下。

注:开发环境MS VC++ 6.0,需要相应MFC库支持。

主页地址:http://jackyvan.ifastnet.com/

软件下载地址:http://jackyvan.ifastnet.com/softwares/NewFilterFile.rar

2007年01月30日

到上周末,按照原先的设计,采用向导式的界面方案出了一个雏形,加载功能代码后,发现如果该功能执行一遍需要用户点击近10次鼠标,界面要改变4次,无谓的增加了代码量;而且窗体之间的数据传递也存在安全隐患,遂决定弃之不用。

重新回到单窗体界面方案上,即采用CSplitterWnd来实现用户功能界面与处理结果的界面的分割,用户不需一步步点击,在一个窗体内就能看到全部功能的实现。这样界面实现代码简单,也有利于功能代码的嵌入,并且对于以后界面的美化起到事半功倍的作用。