百度空间 | 百度首页 
 
文章列表
 
您正在查看 "默认分类" 分类下的文章

2009-11-29 22:05
最近Google发布了新的操作系统(基于Linux),据说百度也要搞自己的系统。
个人觉得Google的操作系统想要在市场上(尤其是中国市场)占有一席之地真的压力很大,Windows几乎清一色地统治了个人和商用电脑,学校里使用的Linux又只是供计算机专业人士研究的系统。无论是从系统本身还是支持的应用软件上,Linux都占不到什么便宜。所以Linux想在短时间内打赢Windows绝非易事。
好的消息是,似乎自WinXp之后,MS似乎就难以再续辉煌了。面对Vista和Win7的惊人返装率,微软不得不重新审视自己。自由软件的发展给了Linux极大的发展空间,同时也使得Windows的进展陷入了困境。
不过对于百度的新系统也不需要大惊小怪,虽然没有确切消息,但我认为Baidu Operating System估计也是一个站在Linux肩上的边框。这个边框以所谓的“框计算”为主体。

另外最重要的一点是:如果Linux有朝一日成为主流,我们这些以Win32 API为生的编程爱好者估计就得另寻出路了……
类别:默认分类 | 评论(4) | 浏览()
 
2009-11-28 21:10
偶尔搞了一下ANSI字符统计(不分大小写),样本就是我机子上所有TXT + DOC文本文件,英文居多。
下面是排名表:
1 0x00 出现次数34412493 这个没有争议,当之无愧
2 0x20 空格,出现次数3803638
3 e      出现次数3729913,仅次于空格,字母e的出现频率是其他字母难以企及的
4 s      出现次数3300682,这家伙经常和e聊天,有时比e来得还猛——assess
5 i       出现次数3065434,“我”也不能落后
6 t       出现次数2978557,我记得原来有数学书就它的出现次数仅次于e
7 a 和 o 出现次数分别为2866889和2866190,不相上下
9 c      出现次数2746047
10 r    出现次数2595182
类别:默认分类 | 评论(2) | 浏览()
 
2009-11-27 11:48
插件越来越少了……连播放WMA都得手动下载添加……还是用0.9x吧~~

另外,0.9x版本的Foo_input_ksp_midi还是可以在1.0中使用的。
类别:默认分类 | 评论(2) | 浏览()
 
2009-11-22 21:32
功能减少了不少,广告也少了很多。
类别:默认分类 | 评论(0) | 浏览()
 
2009-11-15 16:44
首先需要说明的是,在实际的工程应用中,应该尽量拒绝使用菱形继承,因为这样很容易导致模糊调用。

那么,除了模糊调用外,菱形继承究竟会引发什么其他问题呢?我们先来看一个例子。
class A
{
public:
A(): m_a(2){}
public:
int m_a;
};

class B
{
public:
B() : m_b(3){}
public:
int m_b;
};
class C : public A, public B
{
public:
C() : m_c(4){}
public:
int m_c;
};

在代码中,类C从类A,B两个类中继承了两个成员m_a和m_b,所以类C的内存分布如下:
offset     member
0            m_a
4            m_b
8            m_c
大小共12字节。这样的安排是很明晰的,如果在main函数中调用如下代码:
C c;
A* p = static_cast<A*>(&c);
B* t = static_cast<B*>(&c);
那么p指向了offset 0处,而t指向了offset 4处,这时使用p和t两个指针都不会出错,程序正常执行。

但是菱形继承完全打乱了这个计划。如果我们做如下修改:
class CBase
{
public:
CBase() : m_base(1){}
public:
int m_base;
};
class A : public CBase
.....
class B : public CBase
....
这样问题就来了,m_base成员是如何安排的?
我们打开VC进行调试,会发现类C这时会存在两个m_base成员,标识符分别为C::A::m_base和C::B::m_base,类C的大小一下子膨胀到20字节!这可不是我们想要的。
编译器这样做的原因可以从我们main函数中的两个cast转换中得到答案:如果不实现两个m_base成员,那么将无法满足p和t两个指针有意义。
或许有人说,虚继承不是可以共享m_base成员吗?那好,我们看看虚继承是怎么做的:
class A : public virtual CBase
.....
class B : public virtual CBase
现在运行程序,在Watch中查看C的内存分布,C::A::m_base显示为1,而C::B::m_base变成了无法访问,p和t指针能成功地引用到m_base。虽然从内存分布上好像说不通,但看起来问题似乎得到了解决。
然而事情远没有想象中的那么简单,现在计算sizeof(C),结果让人大跌眼镜:竟然是24!类C的大小不但没有减少,反而增加了4字节!

我们来看Memory窗口中显示了什么:这里的类c的内存分布,&c = 0x0012FF68

注意红笔勾住的部分,这些数据是哪儿来的?这些数据对p指针和t指针对m_base成员的定位有什么关系?
看起来,这两数据像是一个地址,那么这个地址处放着什么?还是Memory窗口告诉了我们答案:



至于得到引用p->m_base和t->m_base的具体处理过程,这个问题就留给大家吧~~
类别:默认分类 | 评论(4) | 浏览()
 
2009-11-14 22:39
这样的确能发现不少BUG,虽然也会顺带把STL的一些东西也报成警告。

另外,Opera Turbo好像不能用了。
类别:默认分类 | 评论(3) | 浏览()
 
2009-11-11 21:41
今天晚上还将有暴雪……
类别:默认分类 | 评论(7) | 浏览()
 
2009-11-10 18:41
下了一尺多……今天我们这儿的坡上扒着一排车……
明天去学校看来要坐11路了……

2009-11-11 PS:一晚上又下了10cm,被困了……
类别:默认分类 | 评论(6) | 浏览()
 
2009-11-08 20:59
前些天写程序时想到的,叙述如下:
现有纯字母组成的单词A和单词B,设计一个函数,验证这两个单词是否是同一单词(不区分大小写)。
试求较的解法。

示例:
Check("winDow", "Window") == TRUE;
Check("PspCreateProcess", "PsCreateProcess") == FALSE;
Check("FireFox", "FireFox") == TRUE;

我的方法在下面,其实中间的思想大家基本上都想到了。
bool Equal(const char* A, const char* B)
{
for(; *A != '\0' && *B != '\0' && ((*A - *B) & 0x1F) == 0; A++, B++);
return *A == '\0' && *B == '\0';
}
类别:默认分类 | 评论(14) | 浏览()
 
2009-11-01 21:59
愿钱老一路走好。

正文:
嗯,新加了一些菜单。
感谢FC的FTP支持,现将三个软件的新下载地址放这儿:
KsSuperGraphEx: http://www.0ginr.com/lightning/KsSuperGraphEx.exe
含帮助文件版:http://www.0ginr.com/lightning/KsSuperGraphEx.rar

Foo_input_ksp_midi: http://www.0ginr.com/lightning/foo_input_ksp_midi1.002Beta.rar
KsMusicMonitor: http://www.0ginr.com/lightning/KsMusicMonitor.exe

类别:默认分类 | 评论(3) | 浏览()
 
     
 
 
文章分类
 
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新文章评论
   

[表情]
 
 

回复ForeverBell:只有FBOS才能成为主流
 

Linux10年内不可能成为主流。
 

百度也要搞自己的系统?? 还是基于Linux的吧? Linux的生命力确实很强大!
 
     


©2009 Baidu