Macro über ein konstantes Array



  • Ich habe ein konstantes Array von Int-Werten, die sich nie ändern werden. Nun will ich über für Optimierung dafür sorgen, dass dieses Array nicht ständig ausgelesen, wird, sondern der Speicherzugriff vom Compiler wegoptimiert wird, ein kleines Beispiel folgt:

    const int array[8] = {-1, 15, 18, 22, 143, 145, 777, 1923};
    
    ...
    
    int i;
    for(i = 0;i < 8;i++) {
      ... array[i] ... array[i] ... ;
    }
    

    nun möchte ich, wissen, ob das irgendwie durch Macros vom Compiler direct umgewandelt werden kann dass dann im fertigen Programm nur noch die Konstante schon bereit sind, und die Schleifenvariable praktisch auch wegfällt. Also so dann:

    const int array[8] = {-1, 15, 18, 22, 143, 145, 777, 1923};
    
    ...
    
    ... -1 ... -1 ;
    ... 15 ... 15 ;
    ... 18 ... 18 ;
    ... 22 ... 22 ;
    ... 143 ... 143 ;
    ... 145 ... 145 ;
    usw halt.
    

    Ich bin bis jetzt ned fündig geworden, und ich hab gemerkt dass durch händisches optimieren, durch auflösen der Schleife, und gräßliches Copy and Paste und ersetzen der Zahl für den jeweiligen Ausführungsblock einiges an Geschwindigkeit raushohlen kann. Eigentlich müsste ich ja auch nur dem Compiler irgendwie mitteilen können, dass die Variablen schon zur Compilezeit vorliegen (was sie ja auch tun, aber mit einem globalen const Array, das in einem c-file liegt, will er trotzdem immer auf den Speicherzugriff nicht verzichten, also wie geht man das an?



  • loop unrolling?

    guck dir doch mal an, welche schalter dein compiler hat.



  • Ich hab das constante Array in einer Datein namens global.c:

    const int array[8] = {-1, 15, 18, 22, 143, 145, 777, 1923};
    

    und eine Datei global.h, welche ich in alle Files importiere, wo ich dieses konstante Array verwenden will:

    extern const int array[8];
    

    Kann es vielleicht daran liegen??? Weil dem Compiler die Information über das array nicht sofort zugänglich ist, sondern erst über den Linker verbunden wird?

    lg


Anmelden zum Antworten