第158章 內存榨乾:把五百K當五個G用的瘋子

投票推薦 加入書籤 小說報錯

  紅崗花園地下室的空氣里,除了原本的霉味和煙味,現在又多了一股酸澀的電解液味道。

  陳景明那塊軟包電池的成功,像是一針強心劑,扎進了這群快要猝死的工程師心口。

  但這股興奮勁兒沒撐過十二小時。

  「崩了。」

  孫強把鍵盤一推,整個人往椅背上一癱,椅子發出不堪重負的嘎吱聲。

  屏幕上是一串紅得刺眼的報錯代碼:`Stack Overflow`。

  「內存溢出。」孫強抓著本來就不多的頭髮,指著屏幕上的數據條,「一共就512KB的內存。作業系統內核占了120K,TCP/IP協議棧占了200K,剩下的空間連加載字體庫都不夠,更別說跑圖形界面。」

  他轉過頭,看著坐在角落裡敲代碼的蘇曉月。

  「曉月,聽我一句勸。砍掉圖形界面吧。做成純字符終端,就像DOS那樣。雖然丑點,但能跑通。咱們只有二十天,現在已經過去一半了。」

  蘇曉月沒理他。

  她盯著屏幕上那個死循環的內存分配函數,眼圈黑得像被人打了兩拳。

  「不行。」

  「為什麼不行?諾基亞也是字符界面,愛立信也是!咱們憑什麼非要搞圖標?這硬體根本帶不動!」

  「因為老闆說了,這是電腦,不是電話。」

  蘇曉月終於停下手,轉過身。她手裡捏著半塊干硬的麵包,那是昨晚剩下的。

  「如果是字符界面,老百姓看不懂,那就只能賣給工程師。要想賣給所有人,就必須是圖形化。」

  「那是理想!」孫強急了,拍著桌子上的開發板,「物理限制擺在這兒!512KB就是512KB,你就是把這晶片磨出火星子來,它也變不成1MB!」

  屋子裡的氣氛降到了冰點。

  趙立在一旁不敢說話,他是做應用的,底層崩了,他寫再好的應用也是空中樓閣。

  張漢玉推門進來的時候,正好聽到這句咆哮。

  他手裡提著一袋剛買回來的冰鎮可樂,瓶壁上掛滿了水珠。

  「吵什麼?」

  張漢玉把可樂分給眾人,自己拉過一把摺疊椅,坐在孫強對面。

  「內存不夠?」

  「不夠。差得遠。」孫強指著那個紅色的報錯條,「除非把協議棧砍了,或者把GUI砍了。二選一。」

  張漢玉擰開蓋子,喝了一口,涼氣順著喉嚨衝下去,激得人一激靈。

  「都不砍。」

  他拿起那支黑色馬克筆,走到白板前。白板上已經密密麻麻寫滿了待辦事項,他在角落裡擦出一塊空白。

  「孫工,你覺得內存是什麼?」

  「存儲數據的容器啊。」

  「不,是倉庫。」張漢玉畫了一個方框,「數據是貨物。現在貨物太多,倉庫塞不下了。常規的思路是擴建倉庫,但我們沒錢,也沒硬體支持。」

  他在方框門口畫了一個小圓圈。

  「既然倉庫擴不了,那就把貨物變小。」

  孫強愣了一下:「壓縮?」

  「對。動態內存壓縮。」

  張漢玉在圓圈裡寫了幾個字母:`Z-RAM`。

  「數據寫入內存之前,先經過這個壓縮算法。讀取的時候,再解壓。用CPU的算力,換內存的空間。」

  孫強和趙立對視一眼,都從對方臉上看到了「這人瘋了」的表情。

  「老闆,你知不知道這會增加多少CPU負擔?」孫強把可樂頓在桌上,「ARM7的主頻只有33MHz!它跑系統都已經氣喘吁吁了,你還要讓它實時壓縮解壓?那系統會卡成PPT的!」

  「不會。」

  張漢玉回答得很篤定。

  「因為我們要用的數據,大部分是重複的。比如屏幕上的像素點,大片的白色背景,用行程編碼(RLE)壓縮,幾百個字節能壓成幾個字節。文本數據用哈夫曼編碼,也能壓下去一半。」

  「至於CPU負載……」張漢玉看向蘇曉月,「這就看你們的代碼水平了。」

  「用C寫肯定不行。必須用彙編。」


  蘇曉月突然開口。

  她把手裡的乾麵包扔進垃圾桶,拉過鍵盤,調出了那個黑底綠字的編輯器。

  「把內存管理模塊重寫。每一條指令都自己扣。不走系統調用,直接操作寄存器。」

  孫強張大了嘴巴:「全部?那是幾千行彙編代碼!容易出錯不說,調試起來能要人命!」

  「沒別的路了。」

  蘇曉月已經開始敲擊鍵盤。

  「要麼現在認輸,去跟宋志敏低頭。要麼就拼一把,把這顆CPU的潛力榨乾。」

  鍵盤聲變得密集起來,像驟雨打在鐵皮屋頂上。

  張漢玉拍了拍孫強的肩膀:「別愣著了。趙立負責把圖標素材做減法,能用16色就別用256色。孫強,你配合曉月,把TCP/IP協議棧里的冗餘代碼剔除,只保留最核心的握手和傳輸功能。」

  孫強看著這兩個瘋子,咬了咬牙,罵了一句髒話。

  「媽的,干就干!大不了這二十天不睡了!」

  ……

  紅崗花園的地下室,徹底失去了晝夜的概念。

  只有牆上掛鐘的指針在一圈圈地轉,和角落裡堆積如山的空可樂瓶在無聲地計數。

  代碼行數在瘋狂增長。

  蘇曉月的手指上纏著創可貼,那是長時間敲擊鍵盤磨出的水泡破了。

  張漢玉不懂彙編,但他懂邏輯。他就坐在蘇曉月旁邊,盯著屏幕上的流程圖,隨時糾正邏輯錯誤。

  「這裡不行。入棧出棧太頻繁,浪費時鐘周期。換成寄存器直接尋址。」

  「這個循環沒必要。展開寫,用空間換時間。」

  「這裡的判斷邏輯反了……」

  三天。

  整整三天三夜。

  除了上廁所和扒兩口飯,所有人都沒有離開過那張桌子。空氣渾濁得讓人窒息,每個人身上都餿了。

  第三天凌晨四點。

  蘇曉月敲下最後一個回車鍵。

  沒有報錯。

  編譯通過。

  生成的內核文件大小:380KB。

  比之前足足小了將近一半。

  「刷機。」

  蘇曉月的聲音啞得像砂紙磨過桌面。

  李建國早就準備好了,顫抖著手把那塊自製的開發板連上燒錄器。進度條緩慢地爬升,每一格都像是在爬過眾人的心尖。

  滴。

  燒錄完成。

  張漢玉深吸一口氣,按下了那個微動開關。

  屏幕黑了一下。

  一秒。兩秒。三秒。

  就在孫強以為又要失敗的時候,屏幕亮了。

  沒有亂碼,沒有報錯。

  漆黑的背景中央,一個由像素點組成的紅色火焰圖案,緩緩浮現。

  那是星火科技的Logo。

  雖然邊緣還有些鋸齒,雖然色彩只有簡單的紅黃兩色,但在這一刻,它比任何高清大片都要震撼。

  緊接著,火焰散去,一個藍色的界面跳了出來。

  左上角是信號格,右上角是電池圖標。中間整整齊齊排列著四個圖標:電話、簡訊、聯繫人、瀏覽器。

  「臥槽……」

  孫強捂住嘴,眼淚毫無預兆地流了下來。

  真的跑起來了。

  在512KB的內存里,跑出了圖形界面。

  這是把大象塞進冰箱,而且大象還在冰箱裡跳起了踢踏舞。

  「別急著哭。」張漢玉指了指桌上那根連著電腦串口的數據線,「還沒聯網。」

  這是最後一道鬼門關。

  如果沒有網絡,這也就是個高級點的電子寵物。

  蘇曉月把數據線插好。另一頭的電腦上運行著一個模擬GSM網絡的伺服器程序。

  她在開發板那小小的按鍵上操作著。光標移動,選中了「瀏覽器」。


  點擊。

  屏幕中央出現了一個沙漏圖標,開始旋轉。

  「正在連接……」

  地下室里安靜得能聽到排氣扇扇葉轉動的聲音。

  所有人都屏住了呼吸。

  這套自製的TCP/IP協議棧,能不能扛住真實的數據交換?那個瘋狂的壓縮算法,會不會在解壓數據包的時候崩潰?

  屏幕閃了一下。

  一行黑色的文字出現在白色的背景上。

  `Hello, World!`

  「通了!」趙立跳起來,腦袋撞到了低矮的天花板,但他根本顧不上疼,抱著孫強又蹦又跳。

  「還沒完。」

  張漢玉的聲音依然冷靜,但捏著可樂瓶的手指已經把塑料瓶捏變了形。

  「文字只是第一步。宋志敏要看的是圖。」

  他指了指電腦屏幕:「發那張圖過去。」

  趙立趕緊在電腦端操作,選擇了一張16色的位圖。

  那是張漢玉特意找人畫的——一隻在懸崖邊展翅的雄鷹。

  發送。

  開發板的屏幕上,沙漏轉得更快了。

  數據流通過串口,經過壓縮算法,擠進那可憐的內存,再被CPU解壓,最後渲染到屏幕上。

  這一過程在後世可能只需要幾毫秒,但在現在,卻是漫長的等待。

  屏幕上方開始出現色彩。

  先是藍色的天,然後是灰色的岩石,最後是那隻褐色的鷹。

  一行行,一列列。

  像是在慢慢揭開未來的面紗。

  當鷹的翅膀完整地展現在屏幕上時,蘇曉月身子一軟,直接癱倒在椅子上。

  成了。

  真的成了。

  他們不僅做出了圖形界面,還實現了圖片傳輸。

  這台躺在雜亂電線中間的醜陋機器,此刻就是世界上最先進的智能終端。

  「牛逼!」

  李建國大吼一聲,抓起桌上的半瓶可樂就要噴灑慶祝。

  就在這時,地下室的門被猛地撞開。

  李建國還沒來得及噴,就看見另一個李建國——負責去華強北搞硬體集成的「分身」,滿臉灰敗地沖了進來。

  他手裡捧著一個黑乎乎的東西,還在冒著青煙。

  一股刺鼻的焦糊味瞬間蓋過了屋裡的酸臭味。

  「怎麼了?」張漢玉心裡咯噔一下,猛地站起來。

  「燒了……」

  李建國把那個東西扔在桌上。那是一塊被燒穿的電路板,上面的晶片已經炸裂,露出了裡面的晶圓。

  「GSM射頻模塊……燒了。」

  李建國喘著粗氣,臉上全是黑灰,那是剛才試圖搶救時留下的痕跡。

  「咱們的數據吞吐量太大,這玩意兒是給打電話設計的,根本扛不住持續的高頻數據傳輸。剛才我試著連續發了十分鐘數據包,溫度直接飆到一百度,然後就……」

  他指了指那個冒煙的屍體。

  「這已經是市面上能買到最好的模塊了。西門子的工業級。」

  慶祝的歡呼聲戛然而止。

  孫強的笑容僵在臉上。

  蘇曉月掙扎著坐直身體,看著那塊廢鐵。

  軟體通了,系統通了,電池通了。

  結果死在了最基礎的通信模塊上?

  沒有射頻模塊,這就是個遊戲機,根本不是手機。

  「還有幾天?」張漢玉看著牆上的日曆。

  那個紅色的圈,近在咫尺。

  「五天。」

  李建國的聲音帶著哭腔。

  「只有五天了。去國外訂貨根本來不及,而且……咱們也沒錢了。」

  死局。

  真正的死局。

  張漢玉盯著那縷青煙,煙霧在燈光下繚繞,像極了宋志敏那張嘲諷的臉。


  五天。

  造不出射頻晶片。

  買不到合適的模塊。

  難道就要倒在終點線前一米的地方?

  「別慌。」

  張漢玉把那塊燒焦的板子拿起來,指尖傳來的餘溫燙得嚇人。

  他看著那個炸裂的晶片,腦子裡飛快地閃過無數種方案。

  既然買不到……

  「建國。」張漢玉抬起頭,眼神里透著一股狠戾,「把咱們之前拆回來的那幾台『大哥大』都拿過來。」

  「你要幹嘛?」

  「既然沒有路,那就拆了別人的橋,搭咱們的路。」張漢玉把板子扔回桌上,發出啪的一聲脆響。

  「把摩托羅拉的模擬信號功放拆下來。我要手搓一個『混血』模塊。」

  「模擬信號?」孫強驚叫,「咱們是數位訊號!這根本不兼容!」

  「那就寫個轉碼器。」

  張漢玉轉身,看向已經精疲力盡的蘇曉月。

  「曉月,還能敲得動嗎?」

  蘇曉月推了推滑落的眼鏡,把手放在鍵盤上。

  「只要沒死,就敲得動。」

  張漢玉嘴角勾起一抹瘋狂的弧度。

  「好。那咱們就給宋志敏準備一份大禮。一份讓他這輩子都忘不了的『炸彈』。」

章節目錄