Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Inline und Asmblock unter TD2006: Problem (https://www.delphipraxis.net/78406-inline-und-asmblock-unter-td2006-problem.html)

Go2EITS 4. Okt 2006 15:58


Inline und Asmblock unter TD2006: Problem
 
Wie löst Ihr das INLINE Problem mit Assemblerroutinen.

Ich möchte eine Routine
Delphi-Quellcode:
Procedure X;INLINE;
asm
//...CODE
end;
In TD2006 einfügen. Dies wird aber leider mit einer fehlermeldung honoriert: "Inline Function darf keinen Asmblock haben." In der System Unit konnte ich die Pos mit einem INLINE versehen. Aber ob die überhaupt mitcompiliert wird?

Habt Ihr schon einen "Trick"? :gruebel:
2x die Eingabe bei der DP abgestürzt. Daher nur noch meine "Kurzfassung."

Balu der Bär 4. Okt 2006 15:59

Re: Asmblock unter TD2006 Problem
 
Ähm lass einfach das INLINE weg? :gruebel:

Go2EITS 4. Okt 2006 16:02

Re: Asmblock unter TD2006 Problem
 
Das Inline bringt doch ordentlich Geschwindigkeit. Es fällen doch umfangreiche Sicherungen weg.
Oder willst Du damit sagen das reine Asm code "geinlinet" wird?

Ultimator 4. Okt 2006 16:17

Re: Asmblock unter TD2006 Problem
 
Was meinst du damit, dass umfangreiche Sicherungen wegfallen?
Inline bedeutet, dass nicht jedesmal zu dem Code gesprungen wird, wenn er aufgerufen wird, sondern dass der Code überall dahin kopiert wird, wo er verwendet wird.

Go2EITS 4. Okt 2006 16:25

Re: Asmblock unter TD2006 Problem
 
Es fallen bei Inline die umfangreichen Registersicherungen weg, die bei Aufrufen von Proceduren Geschwindigkeit kosten. Daher gibt es ja bei "INLINE" keine "Procedurenssprünge" mehr.

Dax 4. Okt 2006 16:51

Re: Asmblock unter TD2006 Problem
 
Bei inline-Methoden kopiert der Compiler den nötigen Maschinencode dorthin, wo normalerweise der Aufruf stünde. Assemblercode hat dort nix zu suchen, weil du da mit 100% Wahrscheinlichkeit mehr Schaden anrichten würdest als du Nutzen daraus ziehen könntest.

Darum: Assembler nur ohne inline. Oder kein Assembler.

Go2EITS 4. Okt 2006 17:13

Re: Asmblock unter TD2006 Problem
 
Bin gespannt was Pos aus der Systemunit im Vergleich zu der aus FastCode Projekt unter TD2006 macht.
Unter D7 war 50% bis 70% Steigerung drin. Allein die AnsiStrAtPos aus der DP ist genial. Ist ein Ersatz zu Uppercase und Pos. Da muss ich noch mal testen, ob sich der Einbau von Fastcodes unter DP sich wirklich noch lohnt.

Balu der Bär 4. Okt 2006 17:20

Re: Asmblock unter TD2006 Problem
 
Zitat:

Zitat von Delphi Hilfe
Das reservierte Wort inline und die Direktive assembler werden aus Gründen der Abwärtskompatibilität beibehalten. Sie haben keine Auswirkungen auf den Compiler.

:gruebel:

DGL-luke 4. Okt 2006 17:26

Re: Asmblock unter TD2006 Problem
 
lol?!

also die Direktive inline wurde mit D2005 eingeführt. Und sorgt dafür, dass der Compiler, wann immer es irgendwie möglich ist, ein inlining vornimmt. vielleicht macht er das ja jetzt schon selbstständig und "braucht" die Direktive nicht mehr.

Go2EITS 4. Okt 2006 17:53

Re: Asmblock unter TD2006 Problem
 
Also:
Pos aus FastCode (die schnellste Version) ist ca. 10% schneller als die Pos aus TD2006 Unit System.
Uppercase aus FastCode (auch hier die schnellste Version verwendet) ist 20% langsamer als das Uppercase aus der TD2006 UNIT.
Ich glaubte, das mit Inline noch etwas rauszuholen sei. Da bin ich wohl im Irrtum. Es reicht auch so.

Interssant wird es, meiner Meinung nach, wenn man Uppercase und Pos durch eine Assblerprocedure ersetzt. Aber ich glaube, dass eine gute Procedure ohnen ASM, die beides zusammenfasst, kaum langsamer sein wird. Der Compiler optimiert zu optimal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz