2012-03-28 36 views
2

如果我有主要功能,比如說10K行。具有2.5k線路的4個功能會運行緩慢嗎?或者這些功能只是出於美學原因,如代碼清晰度等?大尺寸的主體會讓程序變慢?

+3

不是本身,但元推理表明,任何人寫一個10k-loc函數可能沒有寫出最高質量的代碼開始。 – 2012-03-28 17:15:57

+0

您可能會發現運行像[Atomiq](http://getatomiq.com/)這樣的工具並查明在這些大型函數中有多少次DRY違例是很有趣的。 – Tod 2012-03-28 17:28:28

回答

12

單個函數不會有任何調用開銷的函數調用開銷,在現代硬件上這個開銷是微不足道的,而具有四個函數的解決方案會導致函數調用懲罰。

但是,下一個維護你的代碼的人會追捕你,並因爲擁有一個10K線路功能或四個2.5K線路功能而殺了你。

功能都應該:

  • 執行的一個工作單元,並有一個單一的責任;
  • 根除代碼重複;
  • Modularise code。

這10K行中有多少行是同一行復制和粘貼的?

+2

+1。我知道當我的團隊負責加速一個帶有不少於13個「goto」的5K線「main」的程序時,我在心裏發生了謀殺。代碼太脆弱了,以至於任何嘗試修改都會破壞它。先編碼正確性,再編碼可維護性,然後在某個地方編碼。 – 2012-03-28 17:17:34

5

它會運行得更慢,因爲代碼將變得如此荒謬可怕以至於很難維護,這無疑會導致錯誤,並在運行時將其磨碎到停頓。

0

想象一下你想要建造一棟大樓的場景,並且你必須單獨完成整個工作......你很容易知道你在做什麼。但是,當你停止在建築物上工作,而其他人被任命去做這項工作......他會陷入地獄......

同樣,單獨做你的工作只會幫助你花足夠的時間。而是任命你的小組中的新成員,讓他們爲你做的工作... ...

回到技術性,使用功能,你的代碼將易於閱讀,維護和編制較小的編譯大小的機會可執行程序。

與往常一樣,您可以一次又一次地調用相同的函數,而不是在模塊中多次重寫相同的代碼。

3

你應該讓你從Linux內核的代碼風格這樣的建議:

「的職能應該是短暫的甜蜜,而且只做一件事,他們應該 適合於文本的一個或2個屏幕(ISO/ANSI屏幕尺寸爲80x24, ,我們都知道),做一件事,做得很好。「

http://www.kernel.org/doc/Documentation/CodingStyle

+0

+1將該文檔用作我所有編碼的基礎。 – Morpfh 2012-03-28 17:50:16

0

這要看情況。理論上講,將所有代碼放入單個函數中將減少函數調用開銷。在一個代碼寫得很好的現代處理器上,雖然開始的時候通常很低。

另一方面,一個相當大的機會會導致一個單一函數的大小會導致緩存的使用率相對較低。與函數調用開銷不同,高速緩存使用率經常是,這是一個相當嚴重的考慮因素。對主內存的引用通常比對緩存的引用速度慢至少15-20倍,所以即使緩存使用的相當小的改進也可以提高速度。

鑑於這兩者之間的不平衡,很可能將其分解爲更小的函數並採用更謹慎的分解會提高速度。