程式設計中需要注意的細節

2021-09-01 13:05:49 字數 1695 閱讀 8669

雖然,這些使用方法看似差別不大,在現在的cpu執行期起來幾乎上可以忽略不計,

但是,我們想一下現在軟體,每乙個都是那麼的龐大,乙個小專案都是幾萬行**,

乙個函式中你消耗一點,那麼多函式是很大的效能消耗的。舉乙個不恰當的例子,

下面的例子是我在虛擬機器中執行,其中也會有機器效能不好的原因,但是我覺得這樣才會將問題展示的更加的嚴重。

1.不要將函式作為迴圈的條件

size= 1024

program 1: time:29ms

p = &a;

for( ; i < size*sizeof(int); i++)

program 2:

time:1ms

p = &a;

len = size*sizeof(int);

for( ; i < len; i++)

原因:因為每次比較條件,函式都需要重新計算的,將會消耗時間。

2. 減少記憶體訪問次數

program:1 time:1ms

i = 0;

for( ; i < 1024; i++)

tmp ++;

program:2 time:7ms

i = 0;

for( ; i < 1024; i++)

tmp = tmp + 1;

原因:記憶體與cpu的頻率差別很大,儘量減少cpu對記憶體的訪問,減少變數引用;

3.去除不必要的分支

program:1 time:3ms

i = 0;

for (tmp = 0; tmp < 100; tmp++)

} program:2 time:2ms

i = 0;

for (tmp = 0; tmp < 100; tmp++)

} 4.間接定址比基位址定址慢,所以將結構體中常用的成員放前面,並且放在一起。(類、介面、檔案同理)

program 1: time:11ms

i = 0;

for( ; i < 1000; i++)

program 1: time:7ms

i = 0;

for( ; i < 1000; i++)

原因:將資料放到同一記憶體頁中,減少頁面切換,增加快取的命中率。

c語言陣列清空的幾種方法比較

#define max 1024

方法一

for( k = 0 ; k <10000 ; k++ )

for( i = 0 ; ifor( j = 0;j < max; j++ )

a[i][j] = 0;

方法二for( k = 0 ; k < 10000; k++ )

for( i = 0 ; ifor( j = 0;j < max; j++ )

a[j][i] = 0;

方法三int *p;

for( k = 0 ; k < 10000; k++ )

}

方法四

int *p;

for( k = 0 ; k < 10000; k++ )

}

方法五

int *p;

for( k = 0 ; k < 10000; k++ )

}

r-

方法六

for( k = 0 ; k < 10000; k++ )

JAVA 繼承需要注意的細節

1 子類的構造過程中 必須 呼叫基類的構造方法 原因 可以這樣理解,每個子類都有 super 屬性 而該屬性指向的是父類物件 在例項化子類物件時 子類的構造方法會預設的去呼叫一次父類的構造方法 目的是為了生成乙個父類物件 並讓 super 指向該物件 這種說法只是我自己理解的,雖然不清楚是為什麼,但...

Android開發過程中需要注意的細節

git 使用 rebase 命令來合併分支,盡量不要直接 merge 導致分支 日誌混亂。開發新功能時,自己在本地建立 feature 分支開發,功能開發完畢之後,參照上面合併流程操作功能的合併,並刪除本地分支,注意不要將本地分支推送到伺服器。平時開發只在 develop 分支和自己的本地分支操作,...

MTK NVRAM 需要注意的一點細節

在mtk讀寫nvram的時候要指定total和size 比如下面的 define nvram srs adjust total 4 define nvram srs adjust size sizeof nvram srs adjust setting s 需要特別注意的是其中的 nvram cat...