AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CopyFileEx und Codeoptimierung XE5

CopyFileEx und Codeoptimierung XE5

Ein Thema von wurzelzwerg · begonnen am 10. Apr 2014 · letzter Beitrag vom 12. Apr 2014
Antwort Antwort
Seite 2 von 3     12 3   
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#11

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 10:42
Deine Version geht.

Das fliegt raus:

Delphi-Quellcode:
var
  Cancelled: Boolean;
begin
  if not CopyFileEx('d:\Neues Textdokument.txt',
      'd:\Neues Textdokument (Kopie).txt',
      nil, nil, @Cancelled,
      COPY_FILE_NO_BUFFERING
   )
   then RaiseLastOSError();
Jetzt komischerweise unabhängig von Code-Optimierung, also immer.


Im ursprünglichen Programm muss das @Cancelled raus und nil rein dann gehts auch dort.
Nur Warum?

Geändert von wurzelzwerg (11. Apr 2014 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#12

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 10:49
Die lokale Variable Cancelled wird nicht implizit initialisiert. Wenn da zufällig true drin steht, würde das CopyFileEx abbrechen. Selbst wenn du die vorher auf false setzt, wird der Compiler den Aufruf wegoptimieren, da die Variable später nicht ausgelesen wird. Offenbar wird die Übergabe an CopyFileEx über den Adressoperator nicht als Verwendung angesehen.

Versuch doch mal einfach nach dem CopyFileEx noch eine Abfrage auf Cancelled zu machen (natürlich so, daß die nicht auch noch wegoptimiert wird).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 10:56
Vielleicht würde Addr(Cancelled) statt @Cancelled einen Unterschied bzgl. Optimierung machen? (Ich rate nur wild)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#14

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 11:07
Ob und welches Cancelled := False; wegoptimiert wurde, müsste man nach dem Compilieren eigentlich sehen (die blauen Pünktchen) und auch der Debugger würde die Befehle entsprechend überspringen.

(natürlich so, daß die nicht auch noch wegoptimiert wird).
Ist der Compiler eigentlich inzwischen so intelligent, daß er auch leere IFs erkennt?
Oder optimiert er if Cancelled then ; immernoch nicht weg?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#15

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 11:08
Hilft beides nicht.
Cancelled ist davor und danach false und CopyFileEx fliegt raus.

Delphi-Quellcode:
var
  Cancelled: Boolean;
begin
  Cancelled:= false;
  if not CopyFileEx('d:\Neues Textdokument.txt',
      'd:\Neues Textdokument (Kopie).txt',
      nil, nil, @Cancelled,
      COPY_FILE_NO_BUFFERING
   )
   then RaiseLastOSError();
   if Cancelled then
     beep;
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#16

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 11:46
if CompilerVer > D2009 then LongBool <> Boolean;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 11:56
War Boolean nicht immer schon ByteBool?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#18

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 12:14
Ja Aber in diesem Fall liegt es an den Variablen. Bei ausgeschalteter Optimierung belegt wohl das boolean eine Registerbreite. Ist sie angeschaltet dann wird nur noch ein Byte belegt. Jetzt wird ein Pointer auf die Adresse des boolean an die CopyFileEx übergeben. Dieses ist der festen Überzeugung das es 4 byte lesen muss und darf. Damit hängt der Inhalt aus Sicht der WinApi davon ab, was dahinter gerade so zufällig an den nächsten 3 byte im Speicher steht.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
wurzelzwerg

Registriert seit: 19. Jun 2011
Ort: Ilmenau
111 Beiträge
 
Delphi XE5 Enterprise
 
#19

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 12:28
Danke, das wars. Mit LongBool gehts.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: CopyFileEx und Codeoptimierung XE5

  Alt 11. Apr 2014, 12:35
War Boolean nicht immer schon ByteBool?
Bis D7 zurück auf jeden Fall.
(kleiner kann ich im moment nicht prüfen )
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz