Deutsch
C ++ Forum

Zeiger

 
- Seite 1 -


Hallo, irgendwie packe ich es mit dem Zeiger nicht von C++(Dev C++).
Es kommt hier der Wert 0 raus, eigentlich wollte ich 45 haben.

Wer kennt sich da aus mit dem Fehler, den ich mit dem Zeiger gemacht habe?

mfg
peter
KompilierenMarkierenSeparieren
declare testram#
dim testram#,100
cls
test()
print byte(testram#,0)
WaitInput
end

proc test

    parameters testram#
    int *a;
    *a=addr(testram#);
    a[0]=45;

endproc

 
13.09.2008  
 



 
- Seite 2 -


Und noch eine For-Schleife in C++.
Hui, die geht ab, 10x 10.000.000.

Kann ich kaum glauben, bestätige das bitte mal.
Ich habe 180ms.
Sebastian kannste die mal Testen, nicht das die Variable mit 10.000.000 falsch durchlaufen wird.

mfg
peter
KompilierenMarkierenSeparieren
 
13.09.2008  
 



long *pL = (long*)PVAR(ram#);

Der Befehl geht nicht .

mfg
peter
 
13.09.2008  
 



Sicher das Du nicht long pL = (long*)PVAR(ram#) meinst? Hab kein prf2cpp zur Hand...
 
13.09.2008  
 



Hab kein prf2cpp zur Hand...

Wird aber Zeit, das es bei dir standard wird diese Wunderwaffe ala C++ mit Profan2ccp.

mfg
peter
 
13.09.2008  
 



long pL = (long*)PVAR(ram#)

Compilerfehler..

Nimm diese Variante : char* pL = reinterpret_cast<char*>( adrr);

mfg
peter
 
13.09.2008  
 




Sebastian
König
Peter Bierbachh
long pL = (long*)PVAR(ram#)

Compilerfehler..

Nimm diese Variante : char* pL = reinterpret_cast<char*>( adrr);


Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante, da die Bereichsvariablen im von Profan2Cpp erzeugten Code zunächst mal kein Zeigertyp (sondern im Grunde einfach long) sind. Manche Compiler meckern dann den alten C-Style Cast mit (long*) an.

Dein Code sieht richtig aus . Natürlich läuft das dann sehr schnell. Für solche Sachen ist Inline-C++ allerdings garnicht notwendig, das der XProfan-Code ja auch nach C++ übersetzt wird. Du kannst zum Beispiel mal dies hier testen:
KompilierenMarkierenSeparieren
declare test%,i%
cls
test%=&GetTickCount

whileloop 1,10,1

    schleife_prf()
    print i%

endwhile

proc schleife_prf

    var zahl% = 0

    whileloop 10000000

        zahl% = zahl% + 1

    endwhile

endproc

Print Str$(Int(&GetTickCount-test%))
WaitInput
end

Wenn ich die Compiler-Optimierungen (mit dem TuneMake-Plug-In  [...]  ) deaktiviere, kann ich keinen Geschwindigkeitsunterschied zu Deiner Variante mit dem Inline-Code mehr feststellen.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.09.2008  
 



Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante,

Kannst du dafür noch einmal einen Ersatz reinstellen, den dann alle Compiler anerkennen?

mfg
peter
 
14.09.2008  
 



Hier sieht es anders aus.
Eingebaut im Programm als C++ und dann mit Profan2cpp : 143ms Dev C++ und 135ms mit BCC55
Als normales Programm mit Profan2cpp erstellt : 670ms mit DEV c++ und 390ms mit BCC55

mfg
peter
KompilierenMarkierenSeparieren
cls
declare bildxy#,laenge%,test%,z%
dim bildxy#,65000
laenge%=65000
test%=&GetTickCount

whileloop 1,100,1

    z%=rgb_farbe_cpp(bildxy#,laenge%)

endwhile

Print Str$(Int(&GetTickCount-test%))
WaitInput
end

proc rgb_farbe_cpp

    parameters bildxy#,laenge%
    declare r%,g%,b%

    whileloop 0,laenge%-1,4

        b%=byte(bildxy#,&loop)
        g%=byte(bildxy#,&loop+1)
        r%=byte(bildxy#,&loop+2)

        if (b%>252) | (g%>252) | (r%>252)

            z%=255
            break

        endif

    endwhile

ENDPROC

 
14.09.2008  
 




Sebastian
König
Peter Bierbachh
Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante,

Kannst du dafür noch einmal einen Ersatz reinstellen, den dann alle Compiler anerkennen?


Der reinterpret_cast<>() sollte eigentlich von allen Compilern erkannt werden - er ist Teil des Standard-C++ Sprachumfangs.... Was genau funktioniert denn nicht? Generell gilt, dass man sich bei Inline-C++ ganz einfach an das halten muss, was der verwendete Compiler unterstützt. Ich kann nur beim Übersetzen des XProfan-Codes sicherstellen, dass das Ergebnis mit allen unterstützten Compilern läuft.

Peter Bierbach
Hier sieht es anders aus.
Eingebaut im Programm als C++ und dann mit Profan2cpp : 143ms Dev C++ und 135ms mit BCC55
Als normales Programm mit Profan2cpp erstellt : 670ms mit DEV c++ und 390ms mit BCC55


Ok, dann kommt es wohl auch auf den Einzelfall an. Inline-C++ ist natürlich praktisch für sehr geschwindigkeitskritische Dinge - ähnlich wie Inline-ASM in C++. Letzteres ginge übrigens auch innerhalb des INLINE_CPP-Blocks, aber ich arbeite zur Zeit auch an einer direkten Unterstützung von Franks XPIA in Profan2Cpp .

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.09.2008  
 



 
- Seite 3 -


Funktioniert jetzt alles Prima...

mfg
peter
 
14.09.2008  
 




Sebastian
König
Peter Bierbachh
Funktioniert jetzt alles Prima...


Super, das freut mich natürlich!
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.09.2008  
 



Beide Compiler Dev C++ bis 4.9.8 und den BCC55 habe ich im Test gehabt.
Jetzt hat der BCC55 immer die Nase vorn gehabt. Bei der Bereichsvariablenüberprüfung/Vergleich bis zu 3x schneller. Man soll sich auf den Schleifentest(Whileloop usw) nicht verlassen. Da war nämlich immer der DEv C++ schneller, wenn es aber ins Eingemachte ging war der BCC55 der schnellere.

Habe alle meine kritischen Grafikprogramme mit Opengl usw, die hier im Forum zur Diskussion waren/sind , fehlerfrei übersetzten können.
Eine erstaunliche Leistung auch den direkten C++-Code einzusetzen war/ist ein riesengrosser Erfolg (nachdem ich es verstanden hatte).

Profan2cpp ist unschlagbar. Zumal es die unter anderem guten einfachen C++-Compiler (Dev C++ und BCC55) fehlerfrei einsetzen kann.
Wenn dann noch die ASM-Routinen mit XPIA/XPSE da reinkommen,...

Für meine ASM-Routinen habe ich mir eine Brücke gebaut.
Ich nutze die erstellte DLL von XPIA/XPSE mit dem Def-Aufruf, kein wesentlicher Aufwand diese reinzusetzen.

mfg
peter
 
14.09.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.598 Betrachtungen

Unbenanntvor 0 min.
funkheld17.12.2013
H.Hackl22.03.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie