20120331工作日記 匯程式設計序的優化

2021-06-05 11:22:27 字數 567 閱讀 7696

經過幾天的學習除錯,將某個演算法轉換成了匯程式設計序,經過profile,發現需要的指令數提高了4倍。。。。。。淚流滿面。。。。。。

經過這個過程我了解到一些事情:

首先基於彙編的人工優化主要是使用特殊的指令,在特殊的定址或運算中,如果有對應的指令(擴充套件的指令集),效率會大幅提高,但是這個c程式本身已經是很優化了,只有簡單的加減移位等操作,如果只是用基本的彙編指令的話,人工優化很難比編譯器優化的好。這次的優化過程,同樣的函式,編譯器(o2選項)編譯出來是38條指令,而我寫出來的是62條指令。

另外函式的各個引數的入棧出棧也比較消耗指令數,在這一點上,巨集函式的效能就好很多。

在用time命令測試程式執行時間時,儘管處理資料量增加了10倍,但執行時間只增加了12%,這說明此程式的瓶頸已經不是cpu了,時間主要都花費在讀入資料上面了。

匯程式設計序的問題主要出在三個方面:一是許多暫存器不能隨便使用;二是函式引數入棧的順序,既函式引數在棧中的位置;三是跳轉指令後面要跟一條nop。

雖然優化的結果比較失敗,不過我還是對函式的效率有了直觀的認識,對反彙編等檔案也有了一定的了解,對程式的執行細節的認識也深入了很多,包括引數的傳遞,引數的入棧等。

工作日記2

1 vc 的.dsw和.dsp dsp 是專案檔案,dsw是工程檔案。dsw是工程檔案,乙個工程,即workspace中可以包含幾個專案檔案,這樣便於開發。那麼在.dsw中就是記錄該workspace包含的各個專案名稱 dsp名稱 當在乙個workspace中管理幾個專案的時候,注意在編譯或查詢的時...

20170626工作日記

邏輯型別真假 c沒提供非00 c bool ture false c語言提供的初始化方法 int x 1204 c 提供的兩種初始化方法c語言 所有變數定義必須位於函式體的最前面 c 所有變數隨用隨定義 使用cout進行輸出 cout x endl cout x y 使用cin進行輸入 cin x ...

2017 07 17 2017 07 18工作日記

昨天周一,算是我認可的人生中正式工作的第一天 雖然在7.12入模子結業,7.13新英答辯,7.14周五開始第一天工作,但是7.14一天基本上都在搭建環境諸如申請賬號,配置開發環境,簽出 依賴解析,以及閱讀文件 7.17配置了一天的teller系統,遇到的問題主要有 1 eclipse工作空間不一致導...