April 2009 Archives

一段在C++里经常犯错误的代码

一个类:
class C{
public:
    C(){}
    ~C(){}
public:
    string a;
    string funa()
    {
        string tmp = "1234";
        return tmp;
    }
};
外部调用类C并使用其成员:
C classc;
char *test1 = classc.a.c_str();
printf("%s\n", test1);
上述正确;如果
C classc;
char *test2 = classc.funca.c_str();
printf("%s\n", test2);
上述不正确,为什么呢?
这个是C++的特性,此类C中的成员函数funa返回的是一个内部变量,其作用域仅仅在外部调用的栈内有效,而成员变量则栈内外都会有效;也可以这样理解,针对C++成员函数的返回值,如果是内部变量的返回,需要copy一份(C里面使用strdup函数)才能持久(栈外)有效,这点在C语言里面是相通的。

一般在perl和java语言中,直接使用函数内部的返回值,无论在栈内、外都是没有错的,但是在C++里面需要注意。C语言里面,一般返回char*时需要注意外,一般返回char或者int,这样是可以的。

有些经验丰富的人也会犯这种错误哟,大部分因为各种语言的混合编程后,导致概念的混淆,当然上述的错误例子可能也会编译通过,运行起来也没有错误,但是会造成一个程序崩溃的隐患。


深入double array trie

什么是Double Array Trie

  • Double Array Trie是TRIE树的一种变形,它是在保证TRIE树检索速度的前提下,提高空间利用率而提出的一种数据结构,本质上是一个确定有限自动机(deterministic finite automaton,简称DFA)。
  • 所谓的DFA就是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表Σ的字符,它都能根据事先给定的转移函数转移到下一个状态。
  • 对于Double Array Trie(以下简称DAT),每个节点代表自动机的一个状态,根据变量的不同,进行状态转移,当到达结束状态或者无法转移的时候,完成查询。

BF(bloom filter)学习心得

一个经典的问题:
有1000瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉,请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠?
如果一个人考虑问题是二进制的考虑方法,那么肯定好不犹豫的会说10只,为什么呢?因为小白鼠能够有两种状态,1代表生,0代表死,那么10只能表示2的10次方种状态,那么也就是说能表示1024种状态,那么答案也就是10只。关于小白鼠如何吃药,读者可以仔细去想想 :)

在linux系统里,或多或少想听听音乐、看看电影,往往发行版本只会提供播放器的可执行的文件,而不提供相关解码,导致播放音乐的播放器只是一个徒具外表的空壳子而已。

mplayer是一款很好的播放器,在官方网站有很详细说明以及解码库,安装mplayer后,下载解码到/usr/lib/codecs目录,这样就可以播放了。



SMP(Symmetric Multi Processing)

SMP翻译过来叫做对称多处理系统。
SMP内有许多紧耦合多处理器,这种系统的最大特点就是共享所有资源。

而单核处理器在使用SMP时,是发挥不了作用的,相反,可能对于某些驱动,比如ati显卡驱动会产生一些副作用效果,影响正常的使用。

如何识别在Linux下是单核系统还是多核系统呢?在/proc/cpuinfo里面存着硬件的一些信息,cpu的个数,以及是否是多核的处理器等等。
cpu cores    : 2看到是单个cpu的核心数;
processor    : 1看到的是cpu的编号,一般是cpu核心的编号数,所以看到底有多少个cpu可以用processor的最大编号数加1(编号从零开始),然后除以2得到cpu的个数。

另外与之相对立的标准是MPP (Massively Parallel Processing),意为大规模并行处理系统,这样的系统是由许多松耦合处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的 CPU都有自己私有的资源,如总线、内存、硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。

ati显卡驱动风波

清明节放假这几天尽摆弄系统了,重新格式化了我的linux分区,然后在笔者的1.5T的硬盘上存了FreeBSD、WindowsXP、WindowsVista和Ubuntu好几个VDI虚拟盘(virtualbox虚拟机所制造出的),以后使用系统不用愁了,嘿嘿。


Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Archive

This page is an archive of entries from April 2009 listed from newest to oldest.

March 2009 is the previous archive.

May 2009 is the next archive.

Find recent content on the main index or look in the archives to find all content.