![]() |
AW: Codeoptimierung lieber abschalten
Ohne einen Beleg dafür ist das nur Angstmacherei.
|
AW: Codeoptimierung lieber abschalten
Zitat:
Dann könnte man es wieder zentral ein/ausschalten. |
AW: Codeoptimierung lieber abschalten
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Delphi-Quellcode:
Der generierte Code sieht so aus:
procedure Test;
var i: Integer; begin for i := 0 to 9 do ShowMessage(1.ToString); end; Anhang 55709 //EDIT: Ach ja, wenn man im Assemblercode nicht die Variable, sondern das Register anspricht, kommt man auch dran. Das kann jeder mit Optimierung testen:
Delphi-Quellcode:
procedure Test;
var i, b: Integer; begin for i := 0 to 9 do begin asm mov b, ebx end; ShowMessage(b.ToString); end; end; |
AW: Codeoptimierung lieber abschalten
Zitat:
|
AW: Codeoptimierung lieber abschalten
Zitat:
Egal, ob aus dem
Delphi-Quellcode:
der Compiler das macht.
for i := 1 to 9 do
Write(i);
Delphi-Quellcode:
Am Ende kommt das Gleiche bei raus.
for i := 8 downto 0 do
Write(9 - i); Aber kommt wer auf die saudumme Idee nach der Schleife auf i zugreifen zu wollen, dann ist er selbst Schuld. @jaenicke: Mit 64 Bit stirbt der Inline-Assembler eh aus. Und wenn i mal nicht in ebx liegt, dann hat dein Code eh ein Problem. Wenn du im Assembler auf "i" zugreifst, dann weiß der Compiler in welchem Register/Stack die Variable liegt und dass hier nicht optimiert werden kann/soll. Auch mit Pointern kann man da Mist bauen.
Delphi-Quellcode:
for i := 0 to 9 { step 2 } do begin
ShowMessage(i.ToString); // 0 2 4 6 8 Inc(PInteger(@i)^); end; |
AW: Codeoptimierung lieber abschalten
Zitat:
![]() Sherlock |
AW: Codeoptimierung lieber abschalten
Ich korrigiere mal einige Aussagen bezüglich "rückwärts zählende Schleifen".
Sofern die Zählvariable innerhalb des Schleifenrumpfes benutzt wird, fügt der Compiler zusätzlich zu der Zählvariable, welche sich im korrekten Wertebereich bewegt zusätzlich eine Variable ein, die er nutzt, um auf 0 runter zu zählen. Diese wird aber nicht wie etwa von Himitsu skizziert für irgendetwas anderes genutzt als für den Schleifen Code an sich. Interessanterweise passiert dies in dem geposteten Code nicht mal, sondern nur, wenn lower und/oder upper bound variabel sind. Das auf 0 runter zählen ist eine gängige Optimierung da hierbei nach dem Dekrement direkt ein bedingter Sprungbefehl stehen kann, anstatt zuerst einen Vergleich auf die obere Grenze - je nachdem wie viele Register für den Code gebraucht werden, kann das aber auch eher nachteilig sein, gerade unter 32bit hat man nur eine Handvoll davon. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
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