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

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 笨笨 閱讀(1992) 評論(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>
            在线成人黄色| 亚洲第一中文字幕| 国产精品乱人伦一区二区| 亚洲国产精品第一区二区| 狠狠爱综合网| 久久精品国产99国产精品| 久久精品91久久香蕉加勒比| 国产精品网红福利| 亚洲一区二区综合| 亚洲午夜伦理| 免费不卡中文字幕视频| 亚洲成人中文| 亚洲精品永久免费| 欧美日韩高清免费| 日韩视频第一页| 亚洲综合日韩在线| 国产日韩欧美精品一区| 久久精品一二三区| 欧美激情一级片一区二区| av成人福利| 国产一区二区三区久久| 欧美成人免费va影院高清| 一区二区激情小说| 久久人人爽国产| 亚洲久久成人| 国产一区二区三区黄视频| 欧美不卡一区| 欧美亚洲一区二区三区| 亚洲电影自拍| 久久久精品tv| 一区二区成人精品| 国内精品久久久久久久97牛牛| 欧美成人一区二区| 亚洲欧美日韩区| 亚洲欧洲日本专区| 欧美一区二区三区另类 | 久久蜜臀精品av| 日韩视频一区二区在线观看| 国产欧美一区二区三区国产幕精品| 麻豆久久久9性大片| 亚洲在线中文字幕| 亚洲欧洲精品一区| 久久久一区二区| 一区二区三区日韩欧美| 激情久久影院| 国产精品免费视频观看| 欧美精品久久天天躁| 久久av二区| 亚洲午夜精品| 亚洲精品视频啊美女在线直播| 久久婷婷成人综合色| 亚洲永久免费精品| 日韩视频一区二区在线观看 | 久久夜色精品国产欧美乱极品| 亚洲午夜在线视频| 亚洲精品免费一二三区| 一区二区自拍| 韩国三级电影久久久久久| 国产精品欧美久久久久无广告| 欧美成人精品1314www| 久久久91精品国产一区二区三区| 亚洲专区欧美专区| 中文在线不卡| 国产精品99久久久久久宅男 | 美日韩丰满少妇在线观看| 欧美在线播放高清精品| 亚洲永久在线观看| 中文在线资源观看网站视频免费不卡 | 国产精品一区二区三区四区| 欧美黑人在线播放| 欧美肥婆bbw| 久久野战av| 久久漫画官网| 久久亚洲春色中文字幕| 久久久久国产一区二区三区四区 | 欧美激情无毛| 欧美激情第二页| 亚洲国产成人久久综合一区| 亚洲电影欧美电影有声小说| 欧美国产精品专区| 亚洲国产三级| 亚洲看片网站| 亚洲天堂成人在线视频| 亚洲一区久久| 亚洲综合国产| 久久久精品国产免大香伊| 久久精品成人欧美大片古装| 久久久久久久999精品视频| 久久久久久一区二区三区| 久久久另类综合| 另类亚洲自拍| 欧美**字幕| 欧美日韩系列| 国产精自产拍久久久久久蜜| 国产婷婷色一区二区三区四区| 国产欧美日韩在线视频| 精品不卡一区二区三区| 亚洲区在线播放| 在线一区二区三区四区五区| 亚洲欧美影院| 久久一区二区三区av| 欧美国产在线观看| 一区二区三区国产精品| 午夜电影亚洲| 蜜桃av一区二区在线观看| 欧美精品www在线观看| 国产精品乱子乱xxxx| 国户精品久久久久久久久久久不卡| 伊人精品久久久久7777| 99日韩精品| 欧美亚洲综合网| 欧美xart系列高清| 亚洲人成久久| 午夜老司机精品| 美国十次了思思久久精品导航| 欧美另类高清视频在线| 国产视频精品xxxx| 亚洲精选成人| 亚洲欧美制服另类日韩| 嫩草影视亚洲| 亚洲在线1234| 欧美v日韩v国产v| 国产乱码精品一区二区三区五月婷| 在线观看三级视频欧美| 亚洲一区二区少妇| 美女视频黄 久久| 亚洲天天影视| 美日韩精品视频免费看| 国产精品视频在线观看| 99成人在线| 一区二区三区视频免费在线观看| 欧美亚洲午夜视频在线观看| 亚洲成色最大综合在线| 性欧美video另类hd性玩具| 欧美激情在线观看| 精品91免费| 久久国产主播| 夜夜嗨网站十八久久| 美女精品网站| 国内外成人免费激情在线视频 | 亚洲一区视频在线| 欧美成人免费视频| 午夜精品久久久久久久99黑人| 欧美精品1区| 在线视频国产日韩| 欧美伊人久久| 一区二区三区国产在线| 欧美日韩高清在线播放| 亚洲欧洲视频| 欧美mv日韩mv国产网站| 国产色综合久久| 欧美亚洲免费在线| 欧美人在线观看| 国产私拍一区| 先锋影音国产精品| 日韩午夜av| 欧美三级电影网| 一本色道久久综合| 亚洲国产小视频在线观看| 噜噜噜久久亚洲精品国产品小说| 国模精品娜娜一二三区| 久久精品视频在线观看| 亚洲欧美在线免费观看| 国产精品区二区三区日本| 亚洲在线一区二区三区| 中文日韩在线视频| 欧美性猛交xxxx免费看久久久 | 亚洲欧美另类在线观看| 亚洲日韩中文字幕在线播放| 欧美承认网站| 最新精品在线| 亚洲激情网站| 欧美日本在线看| 中文精品视频一区二区在线观看| 亚洲国产另类久久久精品极度| 亚洲国产精品成人| 欧美国产免费| 欧美激情欧美激情在线五月| 日韩视频永久免费观看| 日韩小视频在线观看| 国产精品成人一区| 欧美一区二区三区在线观看| 欧美亚洲免费电影| 在线成人av.com| 亚洲黄色在线视频| 欧美日韩一区二区在线观看| 亚洲欧美一级二级三级| 性欧美大战久久久久久久免费观看| 国产一区在线看| 欧美国产极速在线| 久久久高清一区二区三区| 欧美激情第9页| 欧美日韩中文字幕在线| 欧美在线免费| 久久综合久色欧美综合狠狠| 国产精品99免费看| 久久久一本精品99久久精品66| 另类春色校园亚洲| 亚洲一区二区精品在线| 欧美一区二区精品在线|