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

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 笨笨 閱讀(1988) 評論(11)  編輯 收藏 引用 所屬分類: 編碼

評論

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

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

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

# 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>
            久久久久国产精品一区三寸| 亚洲日本视频| 亚洲最快最全在线视频| 欧美va日韩va| 亚洲国产精品va| 欧美国产日韩xxxxx| 亚洲国产欧美一区二区三区同亚洲| 亚洲激情av| 一区二区三区日韩精品| 亚洲欧美资源在线| 久久久久久夜精品精品免费| 欧美激情视频在线播放| 亚洲人成在线观看网站高清| 亚洲一区二区三区在线看| 久久精品噜噜噜成人av农村| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品一线| 国产真实乱偷精品视频免| 亚洲黄色大片| 亚洲一区国产一区| 美女国产精品| 在线亚洲观看| 美女免费视频一区| 国产精品亚洲а∨天堂免在线| 国模一区二区三区| 亚洲视频在线观看视频| 另类欧美日韩国产在线| 一区二区免费在线观看| 久久综合伊人77777麻豆| 国产精品久久久久久久第一福利| 一区免费视频| 香蕉av福利精品导航| 亚洲国产天堂久久综合| 久久精品国产综合| 国产美女诱惑一区二区| av成人免费| 欧美激情小视频| 久久精品亚洲国产奇米99| 国产精品视频导航| 亚洲一区观看| 一本色道精品久久一区二区三区| 美女精品国产| 在线观看亚洲精品| 久久夜色精品国产噜噜av| 亚洲一级免费视频| 欧美日韩在线一区二区| 亚洲美女av网站| 亚洲国产精品成人va在线观看| 久久国产88| 国产精品美女午夜av| 在线亚洲精品福利网址导航| 亚洲国产片色| 欧美激情一区二区三区在线视频观看| 国产一区清纯| 久久久精品免费视频| 亚洲欧美激情一区| 国产精品爽爽爽| 欧美影院午夜播放| 先锋影音网一区二区| 欧美在线观看网站| 亚洲欧美久久| 国产裸体写真av一区二区| 亚洲欧美在线网| 亚洲一区二区高清| 国产日韩高清一区二区三区在线| 亚洲一区图片| 亚洲欧美清纯在线制服| 国产麻豆精品久久一二三| 久久精品av麻豆的观看方式| 久久xxxx精品视频| 亚洲电影免费观看高清| 欧美成人精品高清在线播放| 免费不卡视频| 在线亚洲伦理| 亚洲免费综合| 影音先锋成人资源站| 亚洲高清不卡在线| 欧美日韩一二区| 亚欧成人在线| 久久综合一区二区| 亚洲天堂av图片| 午夜一级在线看亚洲| 亚洲二区在线视频| 亚洲狼人综合| 国产一区二区精品在线观看| 欧美高清视频一二三区| 欧美日韩国产综合视频在线观看 | 亚洲欧洲精品一区二区三区不卡| 欧美极品在线观看| 午夜影视日本亚洲欧洲精品| 久久精品伊人| 一区二区三区www| 午夜欧美视频| 99国产精品自拍| 欧美一级二级三级蜜桃| 亚洲精品欧洲| 午夜在线一区二区| 一区二区高清在线观看| 久久激情婷婷| 亚洲欧美变态国产另类| 老司机久久99久久精品播放免费 | 欧美国产丝袜视频| 欧美一区二区三区视频| 欧美激情成人在线| 久久久亚洲精品一区二区三区| 欧美精品激情在线观看| 久久中文字幕导航| 国产精品视频大全| 亚洲精选在线| 亚洲国产一区在线| 欧美专区中文字幕| 香蕉尹人综合在线观看| 欧美日韩成人综合天天影院| 快射av在线播放一区| 国产精品永久免费| 日韩午夜剧场| 夜夜嗨av一区二区三区网站四季av| 久久精品国产精品亚洲精品| 欧美日本国产一区| 99视频精品免费观看| 久久精品72免费观看| 午夜精品区一区二区三| 欧美三日本三级少妇三2023| 亚洲第一页中文字幕| 影音先锋日韩资源| 欧美在线3区| 久久成人av少妇免费| 国产精品日韩精品欧美精品| 在线亚洲+欧美+日本专区| 亚洲图片欧美一区| 欧美日韩在线看| 99国内精品久久久久久久软件| 亚洲精品久久| 欧美精选午夜久久久乱码6080| 亚洲国产婷婷香蕉久久久久久99 | 91久久久久久久久| 久久综合中文色婷婷| 免费成人网www| 亚洲国产精品va在线看黑人| 美女国产一区| 亚洲免费av电影| 亚洲欧美成aⅴ人在线观看| 国产精品日韩专区| 亚洲欧美另类在线观看| 久久蜜桃香蕉精品一区二区三区| 国产一区二区三区久久| 久久激情一区| 欧美激情一区二区三区蜜桃视频| 亚洲区免费影片| 欧美激情一区二区三区高清视频| 亚洲免费成人av| 久久大综合网| 91久久夜色精品国产网站| 欧美日韩国产综合视频在线观看中文 | 亚洲视频一区二区| 欧美在线一区二区三区| 韩国av一区二区三区在线观看| 久久久91精品国产一区二区三区| 免费视频一区二区三区在线观看| 91久久黄色| 国产精品女同互慰在线看| 久久精品人人做人人爽| 亚洲精品久久久久中文字幕欢迎你| 亚洲素人在线| 狠狠色伊人亚洲综合网站色| 欧美黄色小视频| 午夜影院日韩| 亚洲国产精品女人久久久| 欧美亚洲视频在线观看| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品高潮呻吟久久av无限| 午夜精品av| 最近中文字幕日韩精品| 久久狠狠久久综合桃花| 亚洲人成网站影音先锋播放| 美女日韩在线中文字幕| 在线观看国产一区二区| 蜜桃精品久久久久久久免费影院| 日韩一级精品| 欧美成人精品一区二区三区| 亚洲欧美视频在线观看视频| 亚洲国产成人不卡| 国产精品一区毛片| 欧美精品日韩一本| 久久精选视频| 亚洲午夜视频在线| 亚洲高清av| 久久野战av| 久久精品天堂| 香蕉久久一区二区不卡无毒影院| 亚洲欧洲视频在线| 韩国成人精品a∨在线观看| 欧美午夜精品久久久| 欧美精品久久一区二区| 久久综合久久久| 欧美一区二区在线观看| 亚洲影视在线| 正在播放欧美视频| 99av国产精品欲麻豆| 亚洲激情成人网|