massfish さんのプロフィール天字第一号フォトブログリスト ツール ヘルプ

Joe

職業
好きなもの/好きなこと
勤奋 敬业 忠诚 自信
全 1 枚中 1 枚目
5月14日

编译linux内核,郁闷啊

编译了好几天内核了,用新内核启动系统,我的USB键盘和USB鼠标都识别不了,换了PS/2键盘和鼠标就能识别,能用新内核正常启动,一切ok,我用原来RH9里的配置文件配置新内核的,竟然会出现这种问题,郁闷的,内核配置要200多项,搞的我头都晕了,郁闷郁闷。。。。。。。。。。。。。。。
 
 
还是linux菜鸟,我要学习,我要努力学习。。。。。。。。。。。。。向linux前辈们致敬!!^_^
5月7日

grub安装手记

昨天重装XP之后,我的Red Hat 9.0进不去了,原因是覆写了MBR上的grub(我的grub是安装在mbr上的),重装时把原来Windows下的逻辑分区D盘(30G)分成两个逻辑分区E盘(20G)和F盘(10G )
准备重新安装grub,于是google之,原来有很多人已经碰到同样的问题,轻松找着一个方法,开始安装我的grub
以下是按找到的方法一:
1. 用RH9的光盘启动电脑
2. 按F5进入rescue模式
3. 输入linux rescue
4. 几个next之后
5. 在sh-2.05#提示符下输入chroot /mnt/sysimage
   再输入sh-2.05#grub-install /dev/hda
没有出现方法所说的安装成功信息,出现了很奇怪的错误如下:
 
kernel Bug at ll.rw.blk.c :956!
invaid operand:0000
....................................
后面显示的是一些寄存器的值
 
于是再google之,找到另一方法
以下是按找到的方法二:
1. 用RH9的光盘启动电脑
2. 按F5进入rescue模式
3. 输入linux rescue
4. 几个next之后
5. 在sh-2.05#提示符下输入grub
6. 提示信息:Probing devices to guess BIOS Drives. This may take a long time
7. 1分钟后进入grub提示符
8. 输入grub>root (hd0,8)  注:boot分区在fdisk -l下查看为/dev/hda9,grub下是从逻辑分区编号是从0开始
9. 提示信息:
   Checking if "/boot/grub/stage1" exists ....no
   Checking if "/grub/stage1" exists ... yes
   Checking if "/grub/stage2" exists ... yes
   Checking if "/grub/e2fs_stage1_5" exist .. yes
   Running "embed /grub/e2fs_stage1_5(hd0)1+16 p (hd0,8)/grub/stage2 /grub/grub.conf" ... succeeded
   Done
我以为安装成功了,于是重启之,期盼出现grub选择界面,然而一会屏幕上有grub的字样闪了一下,然后又进入XP了,试了几次都是如此,郁闷ing。。。。,最后找到一些方法都没能成功安装grub,无奈之下重装RH9(grub仍然装在mbr上)。。。。。。。。。。郁闷ing。。。。。。
 
 
 
装完之后,由于好奇想看看到底能不能成功安装grub,于是用Windows启动盘进入DOS,清除MBR,命令是:fdisk /mbr,重启之后grub没有了直接进入XP
然后用RH9启动盘启动,按方法一步骤操作,出现安装成功信息,重启之后出现了可爱的grub启动界面,呵呵。。。开心啊
方法一安装成功信息如下:
    Installation finished. No error reported.
    This is the contents of the device map /boot/grub/device.map
    Check if this is correct or not,if any of the lines is incorrect,fix it and re-run the script 'grub-install'
    #this device map was generated by anaconda
    (fd0)   /dev/fd0
    (hd0)   /dev/hda
 
 
 
 
试完方法一后,清除MBR后又试方法二,按方法二步骤操作,出现安装成功信息,重启之后又一次出现了grub启动界面,开心ing。。。。。。。。
方法二安装成功信息如下:
   Checking if "/boot/grub/stage1" exists ....no
   Checking if "/grub/stage1" exists ... yes
   Checking if "/grub/stage2" exists ... yes
   Checking if "/grub/e2fs_stage1_5" exist .. yes
   Running "embed /grub/e2fs_stage1_5(hd0)1+16 p (hd0,8)/grub/stage2 /grub/grub.conf" ... succeeded
   Done
 
后记:奇怪的是方法二的安装成功信息和前面没有安装成功的信息一样,我想应该是我重装XP之后重新分区的影响吧,原因还在找ing,呵呵
4月4日

十大经典电影


  
    1) 肖申克的救赎(刺激1995):男人必看的励志影片。
  
    2) 教父(1、2):经典黑帮片,有此作品,其他同类一概低头。
  
    3)美国往事:整个人生都在里面。
  
    4)天堂电影院:每个男人的童年回忆,太经典了。
  
    5)无主之城:人家怎么能拍出这么牛的电影!
  
    6)活着:也许是中国目前最伟大的电影。
  
    7) 阿甘正传:教导所有的人要去宽容别人,傻就是福气。
  
     勇敢的心:民族自尊的好教材,希望大家要爱中国。
  
    8) 楚门的世界:探讨人的价值和人性根本的奇思怪作。
  
    9) 音乐之声:音乐的力量、音乐的快乐!
  
    10)辛德勒的名单:震撼人心的历史、充满感染力的摄影和杰出的演员。
  
3月15日

未来移动通信技术一二谈

     由于没有核心技术,在模拟移动通信时代,中国发展了600多万用户,至少有2500亿元流进了国外公司的腰包。到第二代移动通信发展阶段,我国在庞大的GSM设备市场仅仅获取 了5%的微薄份额,将近5000亿元在经由运营商之手后又流向了海外。在3G时代,如果不靠技术创新,把TD—SCDMA做上去,中国不知又要落后多少年!

     随着中国3G标准的确立和TD-SCDMA终端芯片的纷纷推出和系统设备开发的迅猛进展,以及中国政府实质性支持的力度加大,那些对中国3G标准TD-SCDMA能否在市场上获得成功的怀疑者和反对者几乎在一夜之间消失得无影无踪。但是,"TD-SCDMA未来究竟应该在市场上占据什么样的地位?" "中国应当如何发展TD-SCDMA?"等问题又成为新的关注焦点。最初欧盟的流行说法是中国3G建网不应该采用TD-SCDMA;打压不成,只好退而求其次,于是又提出新的观点:TD-SCDMA属UMTS家族的一部分,应当成为WCDMA技术的补充,而不应该单独组网;由于前面两招不能奏效,目前,国外组织又开始转变思路,积极谋求与TD-SCDMA结为伙伴关系,于是乎,又抛出一个新的说法:TD-SCDMA应当与WCDMA混合组网。TD-SCDMA在3G领域地位上的不停地演变,从另类对手演变为同家族的小弟弟,进而升格到现在似乎可以平起平坐的亲兄弟。说法表面上看起来不同,但是究其实质几乎完全一样,那就是:TD-SCDMA即使在中国市场上也不应当定位在3G主流技术,而只能定位在必须依附其他3G技术才能生存的地位。

现状分析:

目前,中国无线公网主要有中国移动和联通的GSM网络、中国联通的CDMA网络、中国电信和网通的PHS网络。 如果发展3G采用TD-SCDMA与WCDMA混合组网方式的话,那么,不同运营商将需要解决兼容多种制式的多模终端的问题:
中国移动:TD-SCDMA、GSM、WCDMA,三模终端;
中国联通:TD-SCDMA、GSM、CDMA、CDMA2000,三模或四模终端;
中国电信:PHS(利用现有网络)、WCDMA、GSM(国际漫游)、TD-SCDMA,三模或四模终端;
中国网通:PHS(利用现有网络)、WCDMA、GSM(国际漫游)、TD-SCDMA,三模或四模终端。

很显然,以上多模终端对技术的要求将大大提高,终端开发进程将极大地延缓。目前,无论WCDMA还是TD-SCDMA首先开发的终端都是GSM/WCDMA或GSM/TD-SCDMA双模终端。其实事情再清楚不过了,如果采用WCDMA与TD-SCDMA混合组网方式,同时又不能提供至少兼容GSM、WCDMA、TD-SCDMA等三模以上的多模终端,那么,中国任何一个运营商都无法建立起一个完全独立的、能够做到无缝连接覆盖的、可实现国际漫游的3G网络。因此,在3G建设初期,运营商必然只能选择一种技术体制进行组网。很显然,一旦采取混合组网方式发放牌照,在多模终端不能满足要求的情况下,国际巨头们就可以利用WCDMA终端短暂的相对丰富优势作进一步的策划,促使运营商先上WCDMA,将来再考虑TD-SCDMA参与混合组网,其实质是将TD-SCDMA参与混合组网权力变成没有任何保障的未来时。一旦WCDMA占得先机,这初期非常短暂的差异几乎意味着永久性地将中国投入巨大资源开发、已经成功在望的TD-SCDMA彻底封杀在黎明前的黑暗之中。

 

      TD-SCDMA是中国人自己提出的标准,他能被国际电信联盟接受为国际3G三大标准之一,是经过了无数专家、设备生产商、网络运营商的综合评估确定下来的,面对外国电信设备厂商的不看好,TD-SCDMA倡导者通过努力已经赢得了一些厂商的支持,而极力倡导TD的大唐电信所研发的GSM与TD-SCDMA的双模手机解决方案已经实现通话。该方案可实现用户在3G网络和GSM网络之间的自由切换,除了支持通话、短信等基本功能外,同时也支持可视电话、流媒体等数据业务。可见TD正在不断的前进。虽然与WCDMA和CDMA2000有一定的差距,但我们要清楚一点,中国政府是大力支持TD的,而且中国3G的潜在用户群是其它任何国家无法比的,我们现在都知道资源紧张,都注意到能源、水资源,也要注意到市场也是资源,我们要好好的利用市场资源,把TD做上去,做强,做大。希望TD能成为中国未来3G网络的主流标准。

 

(一点担忧:爱立信在中国GSM市场占有40%左右的份额,我同学在南京熊猫爱立信做TD-SCDMA,爱立信所有研发中心总共只有50来个人在开发,而在开发WCDMA的投资远远超过这个规模。声明一下中国移动的GSM网络可以通过WCDMA技术可以平滑的升级到3G网络,国家不发3G牌很大程度上是在等TD成熟)

 

PS:TD-SCDMA大事记

  1998年原邮电部组织电信科学技术研究院,在SCDMA技术基础上起草了符合IMT-2000要求的TD-SCDMA建议草案。同年6月30日,该草案被提交给ITU(国际电信联盟),成为IMT-2000的15个候选方案之一。

  1999年9月CWTS(中国无线通信标准研究组)代表中国向3GPP提出将TD-SCDMA纳入3GPP标准的建议。

  1999年12月在法国尼斯召开的3GPP会议上,TD-SCDMA成为国际标准认可的3G标准。

  2001年3月16日TD-SCDMA 标准被3GPP(第三代移动通信伙伴项目)接纳。

  2002年3月大唐移动通信设备有限公司挂牌成立,拉开了中国TD-SCDMA技术全面产业化的序幕。

  2002年10月30日电信科学技术研究院(大唐电信科技产业集团)、广州南方高科有限公司、华立集团有限公司、华为技术有限公司、联想(北京)有限公司、深圳市中兴通讯股份有限公司、中国电子信息产业集团公司、中国普天信息产业集团公司等8家企业自愿联合发起成立TD-SCDMA产业联盟。

  2003年7月世界首次TD-SCDMA手持电话演示。RTX Telecom公司和PRISMA Engineering公司的合作取得了重要突破,他们测试了基于实际网络的TD-SCDMA 3G终端。

  2003年底凯明、展讯、天碁、重邮信科、海天、海信成为TD-SCDMA产业联盟成员,联盟成员扩大到14家。

  2004年6月北电网络与中国普天集团签署了一份谅解备忘录,将成立专门从事TD-SCDMA的研发与产品开发的公司。目前基于TD-SCDMA的手机、手机芯片、商用基站都已经面市。

  2004年12月9日温家宝总理在荷兰接通了来自北京的全球第一个TD-SCDMA商用手机国际长途电话。

  2005年4月16日UT斯达康、上海贝尔阿尔卡特、众友科技、上海迪比特、英华达、中山通宇、中创信测等7家企业正式加入TD-SCDMA产业联盟。至此,TD-SCDMA产业联盟成员企业已达21家。

  2005年9月14日信产部电信研究院TD-SCDMA研究开发和产业化项目办公室主任魏贵明公开宣布:我国独立研发的TD-SCDMA标准目前已具备大规模同频组网能力。这是官方机构首次全面披露TD-SCDMA外场测试成果。

  2005年11月25日广州市新邮通信设备有限公司、青岛海尔通信有限公司、上海科泰世纪科技有限公司、TCL集团股份有限公司及武汉邮电科学研究院5家企业正式加入TD-SCDMA产业联盟。至此,TD-SCDMA产业联盟成员企业已达25家。

  2005年12月19日信息产业部副部长奚国华19日说,第三代移动通信(3G)牌照发放的决策时机已到,牌照发放涉及技术和业务成熟性、竞争格局优化、知识产权问题、3G中国标准TD-SCDMA的发展4个问题。TD-SCDMA在技术上取得重大突破,但关键是支持这一中国标准的产业链崛起。当前,涉及这一标准的核心技术、产业链都已形成,在中国的3G布局中,TD-SCDMA要占有一席之地,可能会由有实力的运营商来运营。

  2006年1月5日国资委专家表示,中国优先支持具有自主知识产权的TD-SCDMA,有利于在3C技术和产品融合的新一轮技术革命中赢得主动,有利于真正占领世界科技竞争的制高点。

  2006年1月20日信息产业部20日颁布,3G三大国际标准之一的“中国标准” TD-SCDMA为我国通信行业标准,这意味着这一标准技术方案已经成熟,能够指导企业进行制造生产。

3月14日

让无数女生尖叫的HelloKitty

让无数女生尖叫的HelloKitty
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloK
ittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHelloKit
tyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHelloKitty
HelloK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
tyHelloKittyHe
lloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloKittyHell
oKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloK
ittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKit
tyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKitty
HelloK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHe
lloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
tyHell
oKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloK
ittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKit
tyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKitty
HelloK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHe
ll
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHell
oK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHelloK
it
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
tyHelloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
ty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
He
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
ll
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHelloK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
it
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
ty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
He
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
ll
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oK
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
He
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHe
ll
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
ll
oK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oK
it
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloKit
ty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHelloKitty
HelloKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloKittyHe
lloKittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloKittyHell
oKittyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloK
ittyHelloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
tyHelloKit
tyHelloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloKitty
HelloKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHe
lloKittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHell
oKittyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloK
ittyHelloK
ittyHelloK
ittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKit
tyHelloKit
tyHelloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloKitty
HelloKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHe
lloKittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKitty
HelloKittyHell
oKittyHell
oKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloK
ittyHelloKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloKit
tyHelloKittyHe
lloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
oKittyHelloKitty
HelloKittyHelloKit
tyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHe
lloKittyHelloKittyHe
lloKittyHelloKitty
HelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHelloKittyHell
3月13日

从“馒头血案”到自由软件

     出于娱乐的目的,胡戈动了凯歌的馒头,凯歌对此非常生气,在凯歌生气,怒斥胡戈“不能无耻到这样的地步”的一刻,也扎碎了自己的馒头碗。 我以为只有国人在关注这件事情,刚刚读了csdn的一篇文章《由“馒头血案”说起 GNU创立者谈自由软件 》,才知道自由软件基金会的创立者Richard Stallman也对此事颇为关心,Richard Stallman大师对自由的理解使我为之惊叹,不愧是大师级人物。

   Richard是在西方某报纸上看到这件事情的,他没看过《无极》和《一个馒头引发的血案》,因为Richard从来不买DVD。为了对公众进行限制,DVD都以加密的方式发行。他们(DVD制造商)以为无法写出能够播放DVD的自由软件,但是Jon Johansen做到了,但美国政府正审查这个软件。所以Richard 只有2个选择,要么私下得到这个软件,要么抵制DVD,(笔者注:Richard只使用自由软件)他更倾向于抵制DVD。电影公司一直都试图让版权法变得更加严格,所以,Richard更不会花钱看他们的电影了。理论上,Richard可以通过P2P网络来获得这两个片子,Richard也一直认为,P2P共享是符合道德伦理的,应该被合法化。美国电影协会一定认为Richard是他们的敌人,或许他们正在找借口来起诉他。所以,他还是不看了,其实,除了坐飞机的时候,他几乎不看电影。Richard认为书籍是更好的朋友。但这并非关键,Richard认为即使没有看过这两个片子,道理很简单,人们有权利做这类恶搞的事情,这是言论自由的重要组成部分。虽然目前美国在人权方面没有太好的例子,但在一些具体的领域做的还是不错的。对于这类恶搞的行为,美国的版权法认为这是“正常使用(fair use)”。在你想进行恶搞之前,无须向某些人获得许可,这是合法的。

   Richard认为恶搞同严肃艺术一样,都是对社会的重要贡献。从这点来说,他并非是完全反对版权法,他不想完全废弃它。如果有人出于商业目的,发行了凯歌的电影,或者利用《无极》做了一个与《无极》非常类似的东西,凯歌完全可以起诉他,或者向他收费。版权法必须被设计成符合公众的利益,如果不尊重这些基本的自由,那就太严格了。

    Richard赞同胡戈这次非常成功的恶搞。希望胡戈不要就此道歉,恶搞是对文化的贡献,没有人需要对此道歉。对于凯歌,他应该学会自嘲。Richard说或许他没有凯歌出名,但也经常有人通过画他的卡通图片来做这类恶搞,对此他感到非常有趣,而且他还会给那些作者写信来交流这类事情。当然也有一些让他非常生气,他也会告诉他们的作者,但是他从来没想过要起诉他们。对于中国的网友,他希望继续坚决地支持胡戈,这有助于帮助凯歌认识到什么才是正确的行为。 

 

    希望凯歌能够学会自嘲,将来创作出更多的优秀电影。希望胡戈能够更加勇敢、冷静地面对来自各方面的压力。从这件事情,我们再次看到:智慧在民间,公平在民间!  

 

PS:Richard Stallman简介

  美国国家工程院院士, GNU工程以及自由软件基金会的创立者、著名黑客,自由软件运动的精神领袖,为自由软件运动竖立了法律规范。如今自由软件已经在世界范围内产生了深远的影响,在计算机工业、科学研究、教育等领域,显示出了极大的价值和生命力。

3月11日

C/C++ 几个基础问题(转)

**链表与数组的区别
A 从逻辑结构来看
A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
A-2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、 删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)
B 从内存存储来看
B-1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小
B-2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦.


**堆和栈的区别

一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—   由编译器(Compiler)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) —   一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区  — 常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区— 存放函数体的二进制代码。

二、例子程序
这是一个前辈写的,非常详细
//main.cpp
int a = 0;                          //全局初始化区
char *p1;                          //全局未初始化区
main()
{
    int b;                            //栈
    char s[] = "abc";            //栈
    char *p2;                      //栈
    char *p3 = "123456";    //123456\0在常量区,p3在栈上。
    static int c =0;             //全局(静态)初始化区
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);
    //分配得来得10和20字节的区域就在堆区。
    strcpy(p1, "123456");   //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}


二、堆和栈的理论知识
2.1申请方式
stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap: 需要程序员自己申请,并指明大小,在c中malloc函数
如p1 = (char *)malloc(10);
在C++中用new运算符
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在栈中的。

2.2 申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

2.3申请大小的限制
栈:在Windows下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

2.4申请效率的比较:
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。

2.5堆和栈中的存储内容
栈: 在函数调用时,(1) 第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,(2) 然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,(3) 然后是函数中的局部变量。 注意: 静态变量是不入栈的。
当本次函数调用结束后,(1) 局部变量先出栈,(2) 然后是参数,(3) 最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

2.6存取效率的比较
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在运行时刻赋值的;
而bbbbbbbbbbb是在编译时就确定的;
但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。
比如:
#include
void main()
{
    char a = 1;
    char c[] = "1234567890";
    char *p ="1234567890";
    a = c[1];
    a = p[1];
    return;
}

对应的汇编代码
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。


2.7小结:
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

**深度优先搜索与广度优先搜索算法有何区别呢?
  通常深度优先搜索法不全部保留结点,扩展完的结点从数据库中弹出删去,这样,一般在数据库中存储的结点数就是深度值,因此它占用空间较少。所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。
  广度优先搜索算法,一般需存储产生的所有结点,占用的存储空间要比深度优先搜索大得多,因此,程序设计中,必须考虑溢出和节省内存空间的问题。但广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索要快些