編寫asm代碼時,通過告訴cpu顯式跳轉到下一條指令,可以減慢代碼一個或兩個週期的竅門。我正在考慮用C++模板做類似的事情。這裏是我的代碼:停止轉移優化g
template <unsigned int c>
inline void adelay()
{
goto x;
x:
adelay<c-1>();
}
template <>
inline void adelay<0>()
{
}
雖然這個想法聽起來很合理,但優化程序似乎通過刪除jmp代碼來阻礙。任何想法如何實現?
背景
其原因也需要這樣做是減慢微控制器,使得其在一個非常特定的頻率輸出光脈衝的代碼。這是一個非常專業化的用途,除了低級硬件訪問(如寫入驅動程序或編程微控制器)外,這種用法不常見。即使那樣,我仍會盡可能地避免這種事情。不幸的是,這並不總是可以避免的。
爲什麼要這樣做?像這樣的任何基於代碼的減速幾乎都是錯誤的做法。 – 2013-03-08 19:29:13
我希望我遇到了試圖減慢我的代碼的問題 – 2013-03-08 19:30:57
根據編譯器的不同,您可以將asm直接放入C++中(至少在Visual C++中) – QuentinUK 2013-03-08 19:32:13