C++代碼優(yōu)化(2)

字號(hào):

盡可能使用常量(const)
    盡可能使用常量(const)。C++ 標(biāo)準(zhǔn)規(guī)定,如果一個(gè)const聲明的對(duì)象的地址不被獲取,允許編譯器不對(duì)它分配儲(chǔ)存空間。這樣可以使代碼更有效率,而且可以生成更好的代碼。
    提升循環(huán)的性能
    要提升循環(huán)的性能,減少多余的常量計(jì)算非常有用(比如,不隨循環(huán)變化的計(jì)算)。
    不好的代碼(在for()中包含不變的if()) 推薦的代碼
    for( i ...
    {
    if( CONSTANT0
    {
     DoWork0( i ; // 假設(shè)這里不改變CONSTANT0的值
    }
    else
    {
     DoWork1( i ; // 假設(shè)這里不改變CONSTANT0的值
    }
    }
    if( CONSTANT0
    {
    for( i ...
    {
     DoWork0( i ;
    }
    }
    else
    {
    for( i ...
    {
     DoWork1( i ;
    }
    }
    如果已經(jīng)知道if()的值,這樣可以避免重復(fù)計(jì)算。雖然不好的代碼中的分支可以簡(jiǎn)單地預(yù)測(cè),但是由于推薦的代碼在進(jìn)入循環(huán)前分支已經(jīng)確定,就可以減少對(duì)分支預(yù)測(cè)的依賴。   把本地函數(shù)聲明為靜態(tài)的(static)
    如果一個(gè)函數(shù)在實(shí)現(xiàn)它的文件外未被使用的話,把它聲明為靜態(tài)的(static)以強(qiáng)制使用內(nèi)部連接。否則,默認(rèn)的情況下會(huì)把函數(shù)定義為外部連接。這樣可能會(huì)影響某些編譯器的優(yōu)化——比如,自動(dòng)內(nèi)聯(lián)。
    考慮動(dòng)態(tài)內(nèi)存分配
    動(dòng)態(tài)內(nèi)存分配(C++中的";new";)可能總是為長(zhǎng)的基本類型(四字對(duì)齊)返回一個(gè)已經(jīng)對(duì)齊的指針。但是如果不能保證對(duì)齊,使用以下代碼來(lái)實(shí)現(xiàn)四字對(duì)齊。這段代碼假設(shè)指針可以映射到 long 型。
    例子
    double* p = (double*)new BYTE[sizeof(double) * number_of_doubles+7L];
    double* np = (double*)((long(p) + 7L) &; –8L);
    現(xiàn)在,你可以使用 np 代替 p 來(lái)訪問(wèn)數(shù)據(jù)。注意:釋放儲(chǔ)存空間時(shí)仍然應(yīng)該用delete p。