Zugriff auf Speicherbereich von Rückgabewert ANSI C



  • Gargoyl schrieb:

    Wenn i deklariert wird, verbraucht sie zwangläufig Speicher unabhängig davon wie oft diese es verwendet wird.

    Du kannst i eliminieren, indem du einen Zeiger hochzählst, wie von DirkB gezeigt. Aber ob das wirklich weniger Stackspeicher oder weniger Zeit verbraucht, ist nicht so leicht zu sagen, weil die Compiler mittlerweile oft schlau genug sind, solche Sachen zu verstehen und dementsprechend vernünftigen Code erzeugen.

    Gargoyl schrieb:

    Lt. meinem Kompiler listing wird für die Deklaration einer Funktion mit dem Rückgabewert char automatisch ein byte im Ram reserviert.

    Da kann was nicht stimmen, weil so kleine Funktionen die ersten Kandidaten für das Inlining sind.

    Gargoyl schrieb:

    also muss man es wohl anders deklarieren oder halt doch ein Stückchen Assembler schreiben...

    Gib mal ein Testbeispiel, dann können wir nachsehen, ob und wie viel besser deine händische Variante auf unseren Systemen sein wird.



  • Das ist zwar nicht das was ich will aber um einiges kompakter als den kram den der Kompiler erzeugt:

    unsigned char test( unsigned char* msg)
    {
       int i;
      __asm
      {
        mov eax, 0     
        mov ebx, msg   
    
    TEST_LOOP:    
        cmp [ebx], 0x30
    
        je TEST_ENDE
    
        inc eax    
        inc ebx    
        jmp TEST_LOOP
    TEST_ENDE:
        mov i, eax   
      }
      return i;      //nret zurückgeben
    }
    

    aber mein eigenltiches Ziel ist ja den platz mit C Source zu sparen und nicht durch asm zu ersetzten...


Anmelden zum Antworten