# 29 C++和ASM
見屏幕一黑,絕影也不知道是怎么回事,以前在公司測試的時候從來沒出現這種情況,反正肯定是程序出了問題,壞就壞在還是全屏,圖像一黑,整個屏幕就黑了。他用眼角的余光瞟了瞟周總,還好周總正在興致勃勃地給醫生們介紹KIPACS是如何如何好,只有醫院領導一個人發現了問題。他趕忙退出全屏關掉KIPACS,再次打開。
醫院領導正要開口,絕影搶在他前面說:“這是正常現象,一般KIPACS用久了就要重啟一次。”那言外之意就是:“這黑屏的事,沒啥大不了的,我們早就知道了。并且這又是不能解決的,要能解決我們還不早就解決了。就比如手機一樣,就算是NokiaN95,夠高檔了吧,可是你能拿它放DVD嗎?放不了,還是將就著用吧。所以還是麻煩你們偶爾重啟一下吧。”
周總聽他這么說,回過頭來,丈二和尚摸不著頭。
最后醫院領導還是在驗收報告上簽了字,一行人撤回公司的時候,周總問:“小絕阿,那個KIPACS重啟是怎么回事呢?以前怎么沒聽你說過?”
絕影哪敢給他講真話,忙說:“沒什么大不了的,回去我調研一下,估計還有些小BUG。”
在公司做CASE就是這樣,雖然公司要求所有BUG的發現和修正都要最終體現到軟件開發文檔里,但實際操作起來,往往是程序員發現了自己的BUG能隱瞞下來的都隱瞞下來,自己抽個時間或者加班把它修改了,這樣給領導的印象要好一些。這和現在很多小煤窯的做法差不多,雖然上頭三令五申要杜絕安全隱患,但事故總還是要發生的,雖然又說發生事故要如實上報及時補救,但小老板們總是能隱瞞不報就隱瞞不報,自己私下處理了事。你想真要是如實上報你一個小小煤窯一年12個月就報了二十多個事故上去明年的開采許可證還怎么可能拿得到?
絕影說是小事,回到公司又看了半天都還是沒搞明白,問題就出在調窗上,這個調窗原理說簡單點其實就是把圖像的一些屬性調整一下然后重新繪制到DC上,小幅度地調整都沒有問題,就是大幅度長時間調整最后顯示圖像的部分都會黑掉。先他以為是對WM_PAINT消息的處理有問題,這個就比較麻煩,系統經常要發送WM_PAINT這個消息,在里面下個斷點或者加個MessageBox就一直要不停地彈出。搞了半天還是找不出個所以然。你想要是真是對這個消息處理出現了問題,那應該一早調窗就有問題才對。
調試了幾次,絕影發現系統變得越來越慢,打開任務管理器,乖乖,KIPACS居然占用了300多M內存。要知道KIPACS剛啟動時不過只占用了17M內存。看樣子像是內存泄漏。這樣想,他繼續調窗,調一下發現內存漲上去可又沒降下來,果然是調窗的時候發生了內存泄漏。
知道了原因解決起來就要快得多,原來是GetDC獲取DC后沒有使用ReleaseDC把它釋放,這部分在WM_PAINT消息中,WM_PAINT消息又頻繁發送,所以那內存泄漏起來真是要命得很。
加上ReleaseDC,KIPACS終于可以流暢地調窗,看看任務管理器,內存占用基本穩定在20M。
搞完這個BUG,絕影看看時間,已經是晚上9點多,公司的人早不知道什么時候都走光了。這次的事情還是給絕影留下了深刻的教訓以至于在很常一段時間,別人問他:“影頭,你看看我這程序,怎么老是出問題阿?”他都會跟別人說:“先看看是不是有內存泄漏。”
問題解決了,等到第二天周總來到公司,絕影便輕描淡寫地對周總說:“昨天那個KIPACS需要重啟的問題我已經解決了,是個小問題,內存泄漏。”
所以什么叫打腫臉充胖子。明明昨天花了5,6個小時憋得幾乎走投無路終于解決出的問題現在在老總面前卻輕描淡寫地說:“是個小CASE而已。”想BOSSLiu也許也是這樣,自己不知道熬了幾個通宵腦細胞不知殺死多少終于給做出個多線程出來,卻輕描淡寫地說:“多線程嘛,那個還不容易,二三十分鐘就搞出來了。”兩個人都是愛吹牛,好像自己能耐大得不得了,什么技術阿方法阿算法阿解決方案阿還不一切都盡在掌握中,原以為牛這樣吹了,大家就決定自己有多了不起,結果最后受苦的是自己,開心的是老板,老板們正是利用了這種心理,他們會說:“不錯不錯,這么個大問題能這樣快地解決,這個程序里面還有二十多個BUG,都是小問題,給你一天的時間夠了吧。”
周總對絕影反映的問題還是比較關心,他說:“內存泄漏這個問題是廣泛存在的阿,這種問題又最不好調試。我給你介紹個軟件吧,BoundsCheck,專門測試內存泄漏。”
在以前,絕影絕對不會去關心別人介紹的什么軟件,首先那軟件是別人介紹的,自己又不熟悉,軟件好不好阿,怎么用阿都要自己去摸索,特別是這個BoundsCheck一聽就知道是個英文版的軟件,還要拿金山詞霸去翻譯菜單或者網上到處去找漢化版,本來以為用這個軟件能極大地提高勞動生產率,結果反而花在學習上的時間都遠遠超過了它提高的勞動生產率,這叫“磨刀誤了砍柴工”。
可這次絕影還是比較慎重,昨天雖然把問題解決了但實在把自己搞得太痛苦,也幸虧昨天開了任務管理器發現了問題,要不說不定把代碼跟蹤到太平洋還不知道問題在哪里。
去網上下個BoundsCheck6forVC,原來是大名鼎鼎的Numega公司出的,想能出SoftICE這樣的軟件的公司出的東西還能有假嗎?就比如今天微軟宣布出了一個新的操作系統,那還不成為各大網站的頭條新聞。所以不僅是衣服,就是軟件也有個品牌效應。
那天在公司又調研了一整天,絕影第一次知道了“純化測試”這個詞。以后每次周總說:“OK,明天我們進行Purification。”絕影就跟大家翻譯道:“好,明天我們進行純化測試,沒裝BoundsCheck的把BoundsCheck裝上,不會用的找我。”
最近幾天BOSSLiu在公司頗為得意,看來醫院對KIREGIS試運行非常滿意,要他修改的地方也很少。KIREGIS的代碼一直是BOSSLiu在負責,絕影從來沒去看,這也好,世界上最幸福的事情就是你把事情交給別人別人做好了交給你居然和你的要求一模一樣,根本不用改。因為沒什么事做,BOSSLiu正好潛心研究起C++來。
本來有好多事情都是一樣,會做容易做好難,就說這C++就算你是寫了五六年程序的程序員,說函數模板、類模板、純虛函數、虛基類這些東西你又用上了多少。BOSSLiu研究了一些這方面東西,再加上KIREGIS在醫院取得了成功,覺得差不多火候已到,絕影也不過爾爾,不過就是匯編好一點嗎?還是那句話,匯編不過100多個指令,有什么難的。
可絕影總以為他對C++的研究應該僅限于“理論”上。
兩人見了面,BOSSLiu問:“你知道這個XXXX基類的構造函數會被調用幾次么?”
絕影自知肯定回答不上來,在這種情況下最好就不要去回答,BOSSLiu是有備而來故意刁難你,不是帶著請教的,所以就算你僥幸答對了,也并不能讓他對你欽佩的感覺油然而生;要是你答錯了,就正中他的下懷,從此以后凡是有技術上的討論,他總是會拿“你XXXX這個問題都不知道,還說個P呀”來壓你。
這正如魯迅先生說的,一家人生了孩子,你說:“這孩子好呀,以后要當什么什么大官有多少多少錢。”那你是騙人的,可人家父母愛聽。你說:“這孩子最后會死。”這是真話,可人家父母不愛聽。怎么辦,你最好就說:“呵,這孩子……你看……呵……哈哈……”
所以絕影避開問題地重點,也打起哈哈來:“研究C++阿?有什么好研究的?我告訴你,C++能做到的,用匯編都能做到。匯編能做到,C++還有些做不到哦。”
這是絕影的殺手锏。首先把問題轉移到匯編上來。這方面他有幾年積累,算是個小行家。再說的確在自定位和精確計算代碼長度這兩個技術上只有匯編能做到,這是高級語言的死穴。管它什么語言,他用這兩點都能把它殺了。
BOSSLiu很不服氣地說:“我知道你那匯編,在Windows下不過是換成‘invoke’來調用API罷了。還能唬我。BOSSJue,你去各大公司看看。你那玩藝過時了。”
“你懂個P,存在就是合理,懂不?這是哪個大哲學家說的。”
“我知道我知道。可你那玩藝就快連存在的價值都沒有了。我問你,除非你搞病毒,還能有什么匯編能做高級語言不能做的?”
這又將了絕影一軍,每次他跟別人說:“我嘛,擅長匯編。”就最怕別人問:“你搞病毒的?”別人這樣說,就好像說:“你這人,真長得就像個賊。”所以每次他都不得不跟別人講一大堆什么匯編不一定搞病毒,除了搞病毒匯編還有什么什么用途,還能寫什么什么程序。想了半天,絕影實在想不起匯編還有什么優勢,但沉默下去就是認輸,從此以后,BOSSLiu就可以名正言順在他面前顯擺C++,從此以后自己和匯編語言在公司中就再沒有什么地位。請急之下,他忽然又想起大學時候做過的大數運算庫,終于洋洋得意地說:“誰說沒用了,我曾經把一個C++做的大數運算庫算法原封不動地翻譯成匯編,算1024位乘法速度居然提高了200倍。我用匯編,可以把大部分操作數都存到寄存器中,可憐的C++阿,還得全部存到內存中,做高級運算還是應該在一旁休息去吧。”
說完這話,BOSSLiu沉默了。這是理論論據和事實論據都充分。本來匯編速度快這是毋庸置疑的,再加上絕影有寫好的程序擺在那里,BOSSLiu從哪里駁都駁不倒。見他不說話,絕影大模大樣往自己桌子上一坐,心里嘀咕著:“還跟我比C++,我匯編是通吃。”
大概過了10分鐘,BOSSLiu忽然跳起來大聲說到:“BOSSJue我差點讓你給忽悠了,剛才忘記了CACHE。現在的CPU都有CACHE,CPU對CACHE的訪問速度和寄存器差不多,C++會把經常使用的變量放CACHE里面,速度應該和匯編差不多才對。”
絕影本來以為可以穩坐釣魚臺了,沒想到BOSSLiu就是這么個不見棺材不掉淚的人,聽他這么說還是有道理,至少從理論上講應該是這樣,這下他又解釋不了實踐上200倍的速度差,現在沒有理論作為依據,就是牽強地去跟BOSSLiu解釋也會把自己在這次爭論中置于非常不利的地位。最后,還是絕影沉默了。
從那次爭論以后,BOSSLiu再也沒給絕影夸過C++的好,也沒再夸自己在C++上的造詣有多深。絕影也沒再在BOSSLiu面前顯擺匯編有多無所不能,自己匯編有多爐火純青。兩人都心知肚明,他們倆水平一般,要是繼續在這語言孰優孰劣上爭論,誰都沒必勝的把握,如果輸了,臉就丟大了。還不如好好再深造幾年,到時再一比高低。
很多年以后,絕影終于想到當初想不出來的問題:匯編語言使用寄存器并不是對寄存器訪問比對內存訪問更快,而是對寄存器尋址比對內存尋址更快。很多時候他想把這個告訴BOSSLiu,但他終于還是沒告訴他。
一晃兩個月過去,絕影和BOSSLiu去醫院對他們的軟件系統作了兩次例行維護和更新,醫院的規模還算大,登記數據已經有三萬多條,KIREGIS還是經受住了耐力測試。KIPACS經過絕影兩次更新基本上也運行比較穩定。在領工資的時候,周總對絕影說:“XXX醫院的CASE已經驗收合格,這個月給你發500元的獎金。因為這個CASE的收入也不多,就你KIPACS貢獻最大,所以獎金也就你有,對其它的人就不要聲張了。”
本來絕影覺得這么大的CASE忙了這么久才500元的獎金周總也真是太扣門了,但聽周總這么說,絕影還心里笑著走出了他的辦公室,恨不得立馬當眾大聲宣布:“知道嗎?XXX醫院項目獎金500元,就我絕影一個人有!”
BOSSLiu也進了辦公室。周總還是說:“XXX醫院的CASE已經驗收合格,這個月發給你500元的獎金。因為這個CASE的收入也不多,就你KIREGIS貢獻最大,所以獎金也就你有,對其它的人就不要聲張了。”
當然,BOSSLiu在出來的時候也恨不得力馬當眾大聲宣布:“知道嗎?XXX醫院項目獎金500元,就我BOSSLiu一個人有!”
大家一個二個領完工資,臉上都喜氣洋洋。公司的電話響了,張廠長積極地搶著去接了電話,說了幾句,回過頭來說:“醫院打來的,找絕影,好像程序有些問題。”
絕影一下傻了。傻的不是程序有些問題,是醫院居然指名點姓要找絕影,而且醫院居然還知道“絕影”的名字,自己麻煩了
- 1 Hello World
- 2 DOS
- 3 第一個夢想
- 4 電源里的病毒
- 5 尋址方式
- 6 黑客
- 7 《黑客防線》
- 8 魔術師的雙手
- 9 又是尋址方式
- 10 墮落
- 11 轉折點
- 12 “影總”
- 13 告別光棍的光棍節
- 14 女人的敵人
- 15 魚和熊掌
- 16 兼職
- 17 另類的方法
- 18 RMB500
- 19 天天上網的工作
- 20 應聘
- 21 MFC
- 22 畢業設計
- 23 出差
- 24 BOSSLiu
- 25 應聘的美女
- 26 多線程
- 27 畢業
- 28 黑屏
- 29 C++和ASM
- 30 RMB2000
- 31 大CASE
- 32 BOSSLiu的離去
- 33 燕兒的工作
- 34 HONDA
- 35 技術主管
- 36 DAP
- 37 動搖
- 38 張廠長的遙控器
- 39 真正的注冊機
- 40 精華和糟粕
- 41 網吧
- 42 工資和房價
- 43 背出來的面試題
- 44 真正的大CASE
- 45 向業主致敬
- 46 DHTML
- 47 先進性
- 48 非洲
- 49 技術經理
- 50 BugYang
- 51 游戲
- 52 大棒和胡蘿卜
- 53 Architect
- 54 EB失敗
- 55 北京
- 56 反匯編器
- 57 貧民窟
- 58 大爺
- 59 BugYang的心事
- 60 Nothing Impossible
- 61 周總的斷言
- 62 曹操的馬
- 63 BugYang進京
- 64 BugYang離去
- 65 辭職
- 66 球不是一個人踢的
- 67 短信
- 68 外掛
- 69 小朱
- 70 分手
- 71 New
- 72 西班牙布局
- 73 100萬用戶
- 74 Bayerische Motorenwerke J
- 75 搞IT的民工
- 76 瘋狂的程序員
- 77 開店
- 78 土匪的新工作
- 79 fatal error
- 80 夭折
- 81 丁骨牛排
- 82 資本家的艱辛
- 83 相親
- 84 BOSScLiu和VB
- 85 王老板
- 86 裝孫子
- 87 CASE Closed
- 99 后記