青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Dict.CN 在線詞典, 英語學習, 在線翻譯

學海苦作舟,書山勤為徑

留下點回憶

常用鏈接

統計

積分與排名

Denoise

English study

Web技術

數據壓縮

一些連接

最新評論

一段代碼的幾種寫法-怎么樣寫好的代碼

 

程序員當然要說代碼了,代碼是程序員的一切,離了代碼說其他都是假的,我這里從一段代碼開始。

 

    int c=0, n=0,nDiff=0;
    
int height = m_imgHeight;//image height
    LPBYTE lpDsp 
= pSampling;
    jp2_int16 
*sp, val;
    LPBYTE dest;
    
//m_imgWidth-image width

    nDiff 
= m_lineBytes - m_imgWidth*3;
    
while (height--) {
        
for (c=0; c<THREE_COMPONENT; c++) {
            dest 
= lpDsp+c;
            sp 
= m_lines[c].m_pBuf;
            
for (n=m_imgWidth; n>0; n--, sp++, dest+=THREE_COMPONENT) {
                
*sp += 2;//virtual option
                    ……
                
*dest = *sp;
            }
        }

        
/*
        
If the bytes isn't 4-bytes multiple, 1-3 bytes will not be 
        initialized. So these bytes should be initialized as 0
        
*/
        
if(nDiff){
            dest 
-= 2;
            
for(n = nDiff;n>0;n--){
                
*dest = 0;
                dest
++;
            }
        }

        lpDsp 
+= m_lineBytes;
    }

 

這段代碼的目的是一個與圖形相關的操作,這里省略了許多代碼,所以不可能編譯;其基本的含義是從一個緩沖區復制到目標緩沖區pSampling。其中m_imgWidthm_imgHeight表示圖象的寬度和高度,m_lineBytes表示4個字節對齊的一行像素的字節數。

我們知道BMP文件的像素要求每行的最終字節數必須是4個倍數。如果圖象寬度是4的倍數,不用仇是沒有問題的;如果不是4的倍數,例如:129,而且每個像素一個字節,那么最終存儲的長度是132個字節,但后面的幾個字節如果不填充是未知的內容。上面if(nDiff){后面的就是為了填充這些多余的字節。

我的一個朋友認為這樣寫更有效一點:

 

            dest -= 2;
            
for(n = nDiff;n>0;n--){
                
*dest = 0;
                dest
++;
            }

他的分析是:如果66%的機會nDiff不是0,這個代碼效率更高。

來看一下兩種寫法的不同:

第一種寫法是:不管3721,都判斷一下;如果nDiff不為0,需要至少3個指令:判斷//判斷。

第二種寫法是:不判斷,先減,然后通過for循環來判斷。對于nDiff0不為0,都是兩個指令:減/判斷。

但如果多余66%的機會(比如70%)nDiff不為0,第一種寫法需要的平均指令數為:

70%*3+30%*1 = 2.4

第二種寫法的平均指令數為:

70%*2+30%*2 = 2

可見第二種寫法的好處可以體現在:

1. 代碼簡潔

2. 效率更高

 

但我發現代碼中很少的機會nDiff不為0,這位老兄又立刻想到了另一種寫法:

  

        if(nDiff){
            dest 
-= 2;
            
do{
                
*dest = 0;
                dest
++;
            } 
while(nDiff--);
        }

再來看一下這種寫法的特點,假設30%的機會nDiff不為0

原來寫法的指令數為:

70%*1+30%*3 = 1.6

上面寫法的指令數為:

70%*1+30%*2 = 1.3

因為第一次不需要判斷;當然后面的循環都是一樣的。

 

從這件事情的本身我們甚至可以說是吹毛求茨,而從效率上來說這個代碼提高的并不是很多。但我想說的不是這些,而是故事說明的寫這個代碼的時候作者在想些什么,我想至少是這樣的:

1. 寫出簡潔的代碼。第二種寫法明顯簡潔。

2. 寫出最高效的代碼,即使是CPU很快的今天。如果上面的代碼在一個循環的內部,效率高低很快就體現出來。

3. 深入的思考和比較。計算條件成立的概率,至少應該對代碼在什么情況下運行很了解。


4. 寫好代碼的精神。

posted on 2007-07-06 12:44 笨笨 閱讀(1990) 評論(11)  編輯 收藏 引用 所屬分類: 編碼

評論

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 15:47 SuperPlayeR

不講效率的話,memset(dest, 0, nDiff);也可以

恕我直言,我個人認為在這樣的小地方求效率的提高,不如把代碼寫的更容易讓人看懂。《Unix編程藝術》中似乎有對于這種“優化”做過探討,我比較贊成書中作者的觀點。  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 16:11 SmartPtr

我有兩點想法, 一是在性能不是關鍵因素的程序中代碼的可讀性重于效率;二是代碼效率優化應該針對關鍵的瓶頸。 當然, 博主的一些思路也是值得討論的  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 17:32 夏夏

怎麼辦,一點點都看不懂~~~  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 21:22 AlanTop

*dest = 0;
dest++;

上面這兩行代碼,可以寫成

*dest++ = 0;

  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 21:41 笨笨

@SuperPlayeR
你說的很對,如果不講效率代碼寫的容易懂是關鍵.但簡潔的代碼也是讓人懂的一個方面.另外實際上我在討論的時候也很關注效率的問題.
  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 21:41 笨笨

@AlanTop
很好,你的這種做法很正確.  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 22:10 sy555

你說的很對,
-------------------------------------------------
http://www.sy555.com  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼[未登錄] 2007-07-06 22:11 QQ

<p><a href="/"";http://www.qq128.net/">QQ信息網</a></p>  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-06 22:54 pass86

支持第二種。  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-09 22:46 Jerry.Yu

why not initialize dest buffer at the beginning, such as using
memset(...) ? If I am right, the size of dest buffer can be work out the beginning.
...

also, the code segment like
for(n ... ; n++) can be write as for(n....; ++n) .. would be better for compiler....



  回復  更多評論   

# re: 一段代碼的幾種寫法-怎么樣寫好的代碼 2007-07-10 09:01 笨笨

@Jerry.Yu
memset is high price if you just set several bytes as zero, so from performancd view, memset isn't always good.

You don't understand the problem really yet. The write style just to avoid two check condition words
  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩中文字幕在线视频| 国产麻豆精品theporn| 久久久久久夜精品精品免费| 亚洲免费在线视频| 亚洲欧美视频| 极品av少妇一区二区| 亚洲欧美视频在线| 欧美xxxx在线观看| 亚洲一区在线视频| 一区二区欧美在线观看| 国产日韩一区二区三区在线播放 | 日韩一级精品| 国产一区二区三区久久悠悠色av | 久久精品免费电影| 久久美女性网| 欧美日韩国产精品成人| 国产精品久久久久婷婷| 精品成人一区| 在线中文字幕一区| 久久精品夜夜夜夜久久| 国产精品xxx在线观看www| 欧美日韩一区二区免费视频| 欧美视频三区在线播放| 国产亚洲精品综合一区91| 亚洲国产精品t66y| 午夜精品久久久久久久白皮肤| 久久超碰97中文字幕| 欧美成人一区二区在线| 亚洲三级电影在线观看| 一区二区国产日产| 欧美69视频| 国内精品美女av在线播放| 亚洲每日更新| 久久九九国产精品| 亚洲视频视频在线| 欧美成人免费在线视频| 国产精品久久久久久久7电影 | 亚洲视频在线看| 免费视频最近日韩| 午夜精品久久| 国产精品福利av| 日韩视频精品在线| 噜噜噜噜噜久久久久久91| 亚洲午夜国产一区99re久久| 嫩草影视亚洲| 在线免费日韩片| 久久九九精品99国产精品| 一区二区电影免费观看| 欧美理论电影在线播放| 欧美一级淫片aaaaaaa视频| 欧美电影在线观看完整版| 亚洲综合日韩| 亚洲人人精品| 久久午夜精品| 日韩网站在线| 欧美日韩国产色视频| 日韩午夜激情电影| 亚洲激情中文1区| 欧美高清视频在线| 亚洲毛片播放| 亚洲精选一区| 欧美丝袜一区二区| 亚洲女人天堂成人av在线| 亚洲视频网站在线观看| 欧美四级在线观看| 亚洲欧洲av一区二区| 亚洲一区二区视频在线观看| 国产精品福利网| 亚洲欧美日韩视频一区| 亚洲综合色在线| 国产一区二区三区久久 | 亚洲人成网站777色婷婷| 麻豆免费精品视频| 久久综合中文色婷婷| 亚洲人成在线播放| 日韩亚洲一区在线播放| 国产精品久久久对白| 午夜影视日本亚洲欧洲精品| 亚洲免费小视频| 黄色亚洲在线| 欧美激情在线有限公司| 欧美日韩二区三区| 久久福利资源站| 久久综合狠狠综合久久激情| 亚洲另类在线一区| 亚洲一级高清| 激情久久久久久久| 亚洲黄网站在线观看| 日韩视频中文| 国产精品乱码一区二三区小蝌蚪| 欧美在线网址| 蜜臀久久久99精品久久久久久| 99精品国产一区二区青青牛奶| 亚洲午夜精品久久久久久app| 国产婷婷色一区二区三区| 欧美成人一区二免费视频软件| 欧美乱大交xxxxx| 久久精品国语| 欧美日韩成人在线视频| 久久免费高清| 欧美午夜精品久久久久久久| 久久亚洲精品视频| 国产精品av久久久久久麻豆网| 久久蜜桃资源一区二区老牛| 欧美日韩日本国产亚洲在线 | 亚洲精选一区| 香蕉视频成人在线观看 | 在线观看亚洲精品| 亚洲欧洲一区| 国产一区二区三区直播精品电影| 亚洲国产综合在线| 国产视频观看一区| 亚洲美女av黄| 亚洲第一在线综合在线| 亚洲一区二区三区中文字幕在线| 亚洲日本aⅴ片在线观看香蕉| 亚洲午夜一区二区三区| 亚洲毛片av在线| 久久躁日日躁aaaaxxxx| 欧美在线一级视频| 国产精品久久久久久久久免费桃花 | 国产精品成人一区二区三区夜夜夜| 久久亚洲美女| 国产欧美一区二区精品忘忧草| 91久久午夜| 亚洲成人自拍视频| 亚洲欧美在线另类| 欧美日韩高清在线观看| 久久久九九九九| 国产毛片精品视频| 国产日韩欧美高清| 一区二区三区|亚洲午夜| 亚洲欧洲精品一区二区三区波多野1战4 | 一区二区三区福利| 另类酷文…触手系列精品集v1小说| 午夜一区不卡| 欧美午夜精品| 亚洲午夜国产一区99re久久| 亚洲视频欧美视频| 欧美日韩成人一区二区| 亚洲精品影院在线观看| 亚洲欧洲日夜超级视频| 葵司免费一区二区三区四区五区| 久久久久久自在自线| 国产日韩欧美精品一区| 午夜精品美女久久久久av福利| 性8sex亚洲区入口| 国产视频丨精品|在线观看| 午夜精品在线观看| 久久免费午夜影院| 亚洲三级免费| 欧美日韩一区二区在线观看| 国产精品99久久99久久久二8| 亚洲免费影院| 国产一区二区剧情av在线| 久久久久久久999| 亚洲国产欧美在线| 亚洲欧美三级伦理| 亚洲第一页在线| 欧美日韩一区二区三区四区在线观看 | 亚洲第一久久影院| 老司机午夜精品视频| 亚洲第一中文字幕| a4yy欧美一区二区三区| 国产精品yjizz| 香蕉久久国产| 欧美激情二区三区| 亚洲视频在线观看三级| 国产精品日韩高清| 久久久天天操| 亚洲免费观看| 久久爱91午夜羞羞| 亚洲国产岛国毛片在线| 欧美精品久久天天躁| 亚洲私拍自拍| 麻豆91精品| 亚洲一区二区三区午夜| 99视频一区二区三区| 久久久久久久91| 日韩视频一区二区三区在线播放| 欧美小视频在线| 久久在线免费视频| 亚洲深夜激情| 欧美激情 亚洲a∨综合| 性欧美激情精品| 亚洲巨乳在线| 国产视频一区免费看| 欧美精品一区二区久久婷婷| 香蕉成人伊视频在线观看 | 最新69国产成人精品视频免费| 午夜精品久久久久久久久久久| 亚洲国产1区| 国产美女一区| 欧美日韩午夜激情| 久久久美女艺术照精彩视频福利播放| 亚洲免费大片| 亚洲精品在线一区二区| 欧美福利视频一区| 久久天天躁夜夜躁狠狠躁2022| 午夜精品久久久久久久蜜桃app |