我明白,最好不要在C中使用寄存器變量,除非你有特別的理由認爲你正在做出比現代編譯器更好的決定。C函數中的靜態局部變量是否會影響執行速度?
由於本地靜態變量停留在函數調用之間,因此在執行速度很重要時使用這些變量是否有意義?
我正在研究一個6502仿真器(只是爲了好玩和學習)。大多數仿真操作根本不需要局部變量,但有一些操作。我在下面貼了一個例子。基本上,我想知道是否將這些變量聲明爲靜態會有任何好處。不要在函數調用之間保留它們的值,而是爲了防止每次都重新分配它們的存儲空間。這是另一種情況,最好把它留給編譯器嗎?
static void
op_asl_zero_page_x (CPU *cpu)
{
unsigned int result;
Word addr;
Byte b;
addr = zero_page_addr_XX (cpu, cpu->x);
b = bus_read (cpu->bus, addr);
/* Copy highest bit to carry */
cpu->status[CPU_STATUS_C] = ((b & 0x80) != 0);
result = (unsigned int)b << 1;
bus_store (cpu->bus, addr, result);
cpu_set_N_Z (cpu, result);
}
感謝提前:)
但'靜態'和非靜態變量有不同的語義?他們的一生是不同的。不完全可以互換。 –
這是*過早優化*的另一種情況。您只在*確定*(無疑)性能問題後才進行優化。也就是說,我認爲CPU的堆棧指針改變了多少字節並不重要,因此,不,局部變量(在典型的基於堆棧的實現中)不會變慢。 –
使變量靜態會使代碼更難閱讀,更難以調試,並會創建一個非常有趣的錯誤來源。我非常懷疑潛在的速度改進(如果有的話)可以彌補這些缺點。 – zoul