Cnangel: April 2009的归档

一个类:
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

| 评论(6)

什么是Double Array Trie

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

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

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

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



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显卡驱动风波

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


关于此归档

这里是CnangelApril 2009发表的所有日记。

上一篇日记Cnangel: March 2009

下一篇日记Cnangel: May 2009

主索引归档页可以看到最新的日记和所有日记。

August 2012

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Powered by Movable Type 5.14-en