2012-05-06 108 views
2

什麼是最快的方法來清零unsigned int?最快的方法爲零

我目前只是將值設置爲0,但我不知道是否有任何技巧來清零變量?我目前需要幾個時鐘週期。我使用的是標準8051處理器,如果有幫助,我需要將兩個不同的變量歸零。

+8

你確定你沒有更好的機會來優化嗎? – delnan

+3

在C?怎麼樣:'x = 0;' – Mysticial

+3

設置爲'0'應該已經很快了。你真的失去了對變量賦值的性能嗎?看起來非常微小。 – birryree

回答

5

問題標記爲8051,因此如果需要將寄存器清零,將寄存器與自身異或將是更快的方法來將其歸零,而不是將其移入零。一個操作碼獲取和解碼與操作碼獲取解碼和操作數獲取。

如果您使用更高級別的語言,而不是手工彙編或在asm中編寫,那麼最好使用var = 0。編譯器將負責所需的優化。

+0

謝謝。我認爲XORing可能會給我幾個我需要的週期。欣賞這個建議 –

+1

Self-XOR的速度和它的速度一樣快。我感到困惑,除非你直接用匯編編程,否則任何編譯器都會以同樣的方式初始化變量。 – Thomas

+0

但如果您使用高級語言編寫代碼,那麼我認爲最好將其留給編譯器進行優化。 – phoxis

1

微觀優化導致微觀結果。

你可能會用變量xor來實現零。很可能你的編譯器已經這樣做了,如果不是更快的話。

3

爲人類編寫代碼,不要浪費任何精力來優化不需要優化的東西。當你想把零分配給變量時,將零分配給變量:x = 0;

使一個正確的程序比使快速程序更正確更容易。

+0

我一定會接受這個建議,但是這個項目特別關於優化當前存在的東西。除了我自己之外,這個代碼不應該被其他人看到。 –

+0

@JoeWanja正在處理硬件寄存器。在編寫啓動ROM控制檯和NT設備驅動程序後,我可以從經驗中得知代碼不適用於人類。這適用於任何作品。 – octopusgrabbus

+0

是的,我明白了。 [tag:c]標籤讓我困惑。 – LihO

0

首先嚐試實施一種計時方法,即對包含相關代碼的代碼塊進行計時,如果您還沒有這樣做。

然後,嘗試var = 0;並使用在列表中生成彙編程序的編譯器開關。然後爲XOR解決方案做同樣的事情。它代表了一些額外的工作,但是你會在那裏得到結果。

2

我相信編譯器會爲你優化這種事情。請記住,微觀優化會導致微觀結果。