Archive for September, 2009

September 30, 2009

我试图以二进制的方式打开文件movie.avi,并复制到另外一个文件film.avi,于是写了下面的一段代码。问题是,这段代码只对某些文件适用,而无法”完全”复制另外一些文件,也就是说,当源文件并没有读完时却已经提前结束了。我想应该是某一个特殊字节的值导致read认为文件已经读完了,但我是以二进制方式打开的文件呀,这种情况下,文件结束符EOF还有意义吗?puzzling……

Tags: ,. 222 views
September 26, 2009

这里还有几个比较小的命令:
zz: 把当前行放到屏幕中央;
zt: 把当前行放到屏幕顶端;
^a: 把当前光标处的数字(包括负数)加1;
^x: 把当前光标处的数字(包括负数)减1。

嗯,就是这个样子地……

Tags: ,. 31 views
September 19, 2009

问题1

小两口有俩娃儿,其中有一个生于星期二的男孩儿。问另一个是男孩儿的概率是多少?

  如果上面的问题略显复杂的话,那么先看下面的这个问题,
问题2

小两口有俩娃儿,其中第一个是的男孩。问第二个是男孩儿的概率是多少?

  对于问题2,由于两个孩子的性别和生日(以周记)是独立的,所以第二个是男孩的概率就是1/2。从古典概型的角度来理解,总的样本空间可以表述为Ω ={男,男},{男,女},{女,男},{女,女},第一个是男孩为事件A={男,男},{男,女},第二个是男孩为事件B={男,男}。于是,在第一个为男孩的前提下第二个是男孩的概率为1/2,即P(AB)/P(B)=(1/4)/(1/2)=1/2。我们把问题再换一个问法,

Tags: ,. 334 views
September 5, 2009

  操作系统为每一个进程维护着一个虚拟的地址空间,这个地址空间的大小通常取决于系统的地址线数目,比如在32位系统中,虚拟地址空间的返回就是0×00000000~0xFFFFFFFF,大小共4G。通常操作系统会划分出一部分来专门供内核使用,而不允许用户进程直接访问。Linux内核占用4G中高地址的1G,即0XC0000000~0XFFFFFFFF,windows内核通常占用高地址的2G空间,但也可配置成1G。进程的代码、数据以及共享库等资源终究是要放在物理内存中才能被访问的,操作系统在建立用户进程时,会为其建立各自独立的虚拟地址空间,然后将各自的数据段、代码段、BSS段等映射到这个地址空间,并为其初始化堆、栈等必须的资源。另外,操作系统还将虚拟空间和物理空间都划分成大小相等的页,把进程数据所在虚拟地址空间的各个虚拟页面映射到其真正被加载的物理页面,这种映射是全相联方式的,即任何一个虚页可以被映射到任何一个实页。

Tags: ,. 32 views
September 4, 2009

  上PIC课讲到信号监测时,老师做过这样一个比喻:说同学们,10分钟后咱们到教室外面集合,对于“查询式”同学,他会不停地数数,直到600,“中断式“会定一个闹表,当然啦,我可以该干嘛干嘛,大家都走了我再走,多省资源啊哈哈!

  话说今儿晚上在运动常跑步,遇到一查询式的哥们儿。我跑第一圈从他身边经过,冲我问:
  - 几点啦?
  - ……八点半……
  - 三十几?
  - ……三十四……
  - 四十四?四十四还是三十四?
  - …………我无语……继续跑……
  又问:
  -哎哥们儿,几点了?
  -三十五!

  若干圈之后,
  -嗨美女,几点了?
  -没带表!

  第八圈,
  -A,几点了?
  -9点。
  -哦……

  啊然后这哥们儿从跑道边栏杆上摘下一个包,把手机掏出来,走出运动场……

Tags: ,. 9 views
September 2, 2009

  这里面没有用到C库,也没有main函数,为了把这个程序编译成可执行文件,需要指定程序的入口。编译指令:

1
2
3
4
5
6
7
8
9
10
$ gcc -c nomain.c 
$ ld -e nomain nomain.o -o nomain
$ ./nomain
$ echo $?
42
$ ls -l nomain
-rwxr-xr-x 1 ivan ivan 618 2009-09-02 22:11 nomain
$ strip nomain
$ ls -l nomain
-rwxr-xr-x 1 ivan ivan 356 2009-09-02 22:15 nomain

  解释一下,ld是linux下的一个链接器,-e选项用来指定程序的入口。编译后可执行文件的大小为618字节(一个动态链接的HelloWorld需要9KB,静态链接将近600K),strip命令可以”剥去”可执行文件中的调试信息,可进一步减小文件的大小,另外在链接时通过其他选项还可以将可执行文件中保存的编译器和系统版本信息也一并去掉……

Tags: ,,. 56 views
1
2
3
4
5
6
7
$ gcc test.cpp -otest
$ ./test&
$ 0x804a024
$ ./test&
$ 0x804a024
$ ./test&
$ 0x804a024

  对可执行文件test,不同的执行实例产生的输出为什么是一样的呢?为什么呢?难道一直以来我对虚拟地址空间的理解都是错误的?另外,如果int a是局部变量,输出就不同。

Tags: . 124 views
Page 1 of 11