簡體   English   中英

性能:循環聲明VS循環初始化

[英]Performance: Declaration in loop VS Reinitialisation in loop

我一直在想,找不到關於這個問題的明確答案。

想象以下兩個示例。

int i;
for(i=0;i<maxLimit;i++)
{
    //code here
}

第二個例子

for(int i=0;i<maxLimit;i++)
{
    //code here
}

基本上,如果他們像那樣,我相信兩者的行為會完全一樣,但考慮到這一點,我的質疑就到位

while(!file.EOF)
{
    for(int i=0;i<maxLimit;i++)
    {
        //code here
    }
}

當第二個示例本身在循環內時,它如何執行? 預先聲明並簡單地將其放回0會更有效,還是執行時間與在內部聲明相同?

就個人而言,我通常將其表示為2,因為在視覺上我覺得更好。 但是我想知道它是否會在循環中產生什么影響。

謝謝您的回答。

大多數現代編譯器都足夠復雜,以至於您在此級別上做出的任何決定都不會有任何改變(澄清一下,經過分析,編譯器可能已將兩者轉換為相同的內部表示形式,這是最有效的實現)。 但是,如果您不相信,在這種情況下的黃金法則是與探查器進行檢查。

是否在for -loop之前聲明它並不重要for因為即使在其中聲明變量,也會發生這種情況。 無論哪種表達都出現在第一個; 在循環體之前執行,因此生成的匯編代碼應完全相同。

實際上,是否在for循環之前,循環之前或for循環體內聲明數百行都沒有關系。 程序的行為保持完全相同 ,並且像這樣的編譯器可以並且通常將知道如何優化像這樣的瑣碎情況。

我認為這兩種情況都不存在主要的性能問題。 我通常也更喜歡使用示例2,主要是因為我知道變量的確切范圍,並且我最終不會陷入麻煩。

對於int值,這將產生零影響。 如果該變量具有非平凡的構造函數,則可能會有所不同。 正如其他人所說,首先編寫代碼,分析代碼,然后考慮進行優化。 這種變化幾乎總是最好的一個微觀優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM