2012-07-16 68 views
1

我想了解如何在使用gcc編譯時禁用內核模塊的代碼優化。 我試着讓編譯指示這樣如何防止內核模塊中的gcc優化?

#pragma optimize("",off) 
void rt_ct_use_cpu(unsigned long long n_cicle){ 
    unsigned long long i; 
    for(i=0;i<n_cicle;i++); 
} 
#pragma optimize("",on) 

但是,編譯器會發出警告說,它會忽略這些編譯指示。我也試圖使該避免編譯器滾動循環像

void rt_ct_use_cpu(unsigned long long n_cicle){ 
    unsigned long long i; 
    unsigned long long time=0; 
    unsigned long long timebase = rt_get_cpu_time_ns(); 
    for(i=0;i<n_cicle;i++) { 
     time += rt_get_cpu_time_ns(); 
     time -= timebase; 
    } 
} 

但在這種情況下,它並不重要多久是cicle東西(有多大n_cicle)程序將運行總是相同數量的時間(幾毫秒)

你能幫我嗎?

+0

你能用-O0編譯這些文件嗎? – Michael 2012-07-16 09:15:50

+1

或者,如果您真正需要忙碌循環,請參閱本頁的第7.3.1.1節http://www.makelinux.net/ldd3/chp-7-sect-3。如果您只是想延遲執行一段時間,則在大多數情況下最好使用延遲/休眠功能。 – Michael 2012-07-16 09:32:26

+0

你真棒!使用延遲功能的解決方案非常出色!非常感謝你! – user1528368 2012-07-16 13:08:52

回答

0

你不能或者至少你應該這樣做,在Linux內核中。需要至少-O1才能確保內聯器和其他必要的優化器運行。例如,某些彙編代碼(如setjmp函數)必須內聯,否則將無法正確執行。