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

Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

學(xué)海苦作舟,書山勤為徑

留下點(diǎn)回憶

常用鏈接

統(tǒng)計(jì)

積分與排名

Denoise

English study

Web技術(shù)

數(shù)據(jù)壓縮

一些連接

最新評(píng)論

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

 

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

 

    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;
    }

 

這段代碼的目的是一個(gè)與圖形相關(guān)的操作,這里省略了許多代碼,所以不可能編譯;其基本的含義是從一個(gè)緩沖區(qū)復(fù)制到目標(biāo)緩沖區(qū)pSampling。其中m_imgWidthm_imgHeight表示圖象的寬度和高度,m_lineBytes表示4個(gè)字節(jié)對(duì)齊的一行像素的字節(jié)數(shù)。

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

我的一個(gè)朋友認(rèn)為這樣寫更有效一點(diǎn):

 

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

他的分析是:如果66%的機(jī)會(huì)nDiff不是0,這個(gè)代碼效率更高。

來(lái)看一下兩種寫法的不同:

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

第二種寫法是:不判斷,先減,然后通過(guò)for循環(huán)來(lái)判斷。對(duì)于nDiff0不為0,都是兩個(gè)指令:減/判斷。

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

70%*3+30%*1 = 2.4

第二種寫法的平均指令數(shù)為:

70%*2+30%*2 = 2

可見(jiàn)第二種寫法的好處可以體現(xiàn)在:

1. 代碼簡(jiǎn)潔

2. 效率更高

 

但我發(fā)現(xiàn)代碼中很少的機(jī)會(huì)nDiff不為0,這位老兄又立刻想到了另一種寫法:

  

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

再來(lái)看一下這種寫法的特點(diǎn),假設(shè)30%的機(jī)會(huì)nDiff不為0

原來(lái)寫法的指令數(shù)為:

70%*1+30%*3 = 1.6

上面寫法的指令數(shù)為:

70%*1+30%*2 = 1.3

因?yàn)榈谝淮尾恍枰袛啵划?dāng)然后面的循環(huán)都是一樣的。

 

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

1. 寫出簡(jiǎn)潔的代碼。第二種寫法明顯簡(jiǎn)潔。

2. 寫出最高效的代碼,即使是CPU很快的今天。如果上面的代碼在一個(gè)循環(huán)的內(nèi)部,效率高低很快就體現(xiàn)出來(lái)。

3. 深入的思考和比較。計(jì)算條件成立的概率,至少應(yīng)該對(duì)代碼在什么情況下運(yùn)行很了解。


4. 寫好代碼的精神。

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

評(píng)論

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

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

恕我直言,我個(gè)人認(rèn)為在這樣的小地方求效率的提高,不如把代碼寫的更容易讓人看懂。《Unix編程藝術(shù)》中似乎有對(duì)于這種“優(yōu)化”做過(guò)探討,我比較贊成書中作者的觀點(diǎn)。  回復(fù)  更多評(píng)論   

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

我有兩點(diǎn)想法, 一是在性能不是關(guān)鍵因素的程序中代碼的可讀性重于效率;二是代碼效率優(yōu)化應(yīng)該針對(duì)關(guān)鍵的瓶頸。 當(dāng)然, 博主的一些思路也是值得討論的  回復(fù)  更多評(píng)論   

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

怎麼辦,一點(diǎn)點(diǎn)都看不懂~~~  回復(fù)  更多評(píng)論   

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

*dest = 0;
dest++;

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

*dest++ = 0;

  回復(fù)  更多評(píng)論   

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

@SuperPlayeR
你說(shuō)的很對(duì),如果不講效率代碼寫的容易懂是關(guān)鍵.但簡(jiǎn)潔的代碼也是讓人懂的一個(gè)方面.另外實(shí)際上我在討論的時(shí)候也很關(guān)注效率的問(wèn)題.
  回復(fù)  更多評(píng)論   

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

@AlanTop
很好,你的這種做法很正確.  回復(fù)  更多評(píng)論   

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

你說(shuō)的很對(duì),
-------------------------------------------------
http://www.sy555.com  回復(fù)  更多評(píng)論   

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

<p><a href="/"";http://www.qq128.net/">QQ信息網(wǎng)</a></p>  回復(fù)  更多評(píng)論   

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

支持第二種。  回復(fù)  更多評(píng)論   

# 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....



  回復(fù)  更多評(píng)論   

# 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
  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区中文字幕免费看| 亚洲欧洲日本mm| 欧美日韩在线一区二区| 国产欧美精品在线| 亚洲网站视频福利| 亚洲国产福利在线| 一区二区三区免费看| 免费试看一区| 亚洲国产91| 欧美sm视频| 久久久精品一品道一区| 国外成人性视频| 久久裸体艺术| 久久不射中文字幕| 国精产品99永久一区一区| 久久精品一区四区| 久久riav二区三区| 伊人狠狠色j香婷婷综合| 欧美成年人网| 欧美二区在线播放| 一区二区三区高清在线| 亚洲无线视频| 国产亚洲一区二区三区在线观看| 久久精品成人| 久久人人97超碰精品888| 亚洲国产精品毛片| 亚洲精品看片| 国产精品爽黄69| 久久综合久久久| 欧美成人精品一区二区三区| 亚洲精品一区二区三区四区高清 | 欧美www视频| 久久久久久亚洲综合影院红桃 | 中文在线资源观看网站视频免费不卡 | 久久久久久有精品国产| 久久精品一区二区三区中文字幕| 亚洲第一天堂无码专区| 亚洲精品日韩综合观看成人91| 欧美日韩视频在线一区二区 | 亚洲性图久久| 香蕉尹人综合在线观看| 亚洲国产欧美久久| 99国产精品久久久| 国产一区久久| 日韩亚洲欧美成人一区| 国产日韩在线亚洲字幕中文| 欧美黄色aa电影| 国产精品视频网站| 欧美国产一区二区在线观看| 国产精品第13页| 欧美国产日本高清在线| 国产精品高潮在线| 欧美激情一区二区三区全黄| 国产精品一区在线观看你懂的 | 欧美日韩在线播放一区二区| 久久久亚洲午夜电影| 欧美伦理视频网站| 巨乳诱惑日韩免费av| 国产精品国产三级国产aⅴ9色| 欧美va日韩va| 国内综合精品午夜久久资源| 夜夜嗨av一区二区三区四区| 亚洲国产欧美不卡在线观看 | 亚洲精品免费在线观看| 亚洲欧美日韩区| 亚洲美女中文字幕| 久久久91精品国产| 亚洲影院免费观看| 牛牛精品成人免费视频| 久久人人精品| 国产视频一区二区在线观看 | 欧美香蕉视频| 亚洲国产精品尤物yw在线观看| 久久精品国产精品亚洲综合| 国产精品亚洲综合一区在线观看 | 欧美成人a视频| 久久精品五月| 国产精品日日摸夜夜摸av| 日韩亚洲欧美一区二区三区| 亚洲人成精品久久久久| 久久久久久久网站| 久久久91精品国产一区二区三区| 欧美四级在线观看| 亚洲欧洲日韩综合二区| 亚洲国产99| 美女图片一区二区| 蜜臀av国产精品久久久久| 在线成人激情| 久久久夜精品| 欧美高清在线观看| 亚洲国产精彩中文乱码av在线播放| 久久国产精品一区二区三区| 久久久精品网| 在线观看视频亚洲| 久久理论片午夜琪琪电影网| 欧美xx视频| 亚洲精品久久久久久久久| 蜜臀99久久精品久久久久久软件| 欧美成黄导航| 日韩视频永久免费观看| 欧美精品在线观看91| 日韩午夜在线电影| 亚洲综合电影| 国产亚洲va综合人人澡精品| 久久久久国产一区二区| 亚洲国产黄色| 亚洲一区三区视频在线观看| 国产精品亚洲一区二区三区在线| 午夜精品福利电影| 美女免费视频一区| 亚洲精品在线免费观看视频| 欧美久久久久久久久久| 亚洲永久精品大片| 久久精品国产亚洲a| 在线观看欧美视频| 欧美xx69| 亚洲一区精品视频| 久久夜色精品国产欧美乱极品| 亚洲国产精品123| 欧美三级不卡| 久久久91精品国产一区二区精品| 亚洲国语精品自产拍在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品视频免费观看| 久久综合久久久久88| 99pao成人国产永久免费视频| 亚洲欧美在线高清| 亚洲国产va精品久久久不卡综合| 欧美日韩精品欧美日韩精品一| 亚洲欧美制服中文字幕| 欧美激情精品久久久久久蜜臀| 亚洲性视频网站| 在线观看欧美日韩| 国产精品久久一卡二卡| 老鸭窝91久久精品色噜噜导演| 一本色道久久综合亚洲91| 久久综合精品国产一区二区三区| 99精品国产在热久久婷婷| 国产曰批免费观看久久久| 欧美精品1区2区| 久久国产福利| 亚洲午夜精品视频| 亚洲国产合集| 免播放器亚洲一区| 欧美丰满高潮xxxx喷水动漫| 日韩视频中文| 黑丝一区二区三区| 欧美无乱码久久久免费午夜一区 | 国产午夜精品一区二区三区欧美 | 你懂的亚洲视频| 午夜激情亚洲| 国产精品99久久99久久久二8| 欧美 日韩 国产一区二区在线视频 | 久久综合99re88久久爱| 亚洲综合成人在线| 亚洲精品中文字幕女同| 精品成人一区二区三区| 国产精品视频内| 欧美午夜剧场| 欧美美女bb生活片| 蜜桃av噜噜一区| 久久久久久亚洲精品不卡4k岛国| 亚洲欧美日韩在线综合| 9国产精品视频| 最新69国产成人精品视频免费| 美女日韩在线中文字幕| 久久久久www| 欧美在线免费| 欧美一区二区精美| 午夜视频一区二区| 亚洲视频中文| 一区二区三区四区国产| 亚洲免费av电影| 亚洲高清不卡在线观看| 欧美吻胸吃奶大尺度电影| 欧美日韩视频在线| 欧美丝袜第一区| 国产精品99免费看| 国产精品久久综合| 国产精品理论片| 国产精品爽黄69| 国产午夜精品视频| 红桃视频国产精品| 尤物在线观看一区| 亚洲黄一区二区| 亚洲伦理在线| 中文一区二区| 欧美在线播放一区二区| 久久精彩免费视频| 另类欧美日韩国产在线| 欧美国产精品久久| 亚洲国产精品嫩草影院| 亚洲精品视频中文字幕| 一区二区三区免费观看| 亚洲欧美日韩久久精品 | 国产专区欧美精品| 在线观看三级视频欧美| 亚洲理论电影网| 一区二区日韩欧美| 午夜精品在线看|