AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Arrays vergleichen\sortieren

Ein Thema von EWeiss · begonnen am 22. Nov 2017 · letzter Beitrag vom 30. Nov 2017
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 09:18
Kleiner Einspruch: es handelt sich ja um ein dynamisches Array, und da gilt (http://docwiki.embarcadero.com/RADSt...amische_Arrays)
Zitat:
Dynamische Array-Variablen sind implizit Zeiger und werden mit derselben Referenzzählung verwaltet wie lange Strings. Um ein dynamisches Array freizugeben, weisen Sie einer Variable, die das Array referenziert, den Wert nil zu, oder Sie übergeben die Variable an Finalize. Beide Methoden geben das Array unter der Voraussetzung frei, dass keine weiteren Referenzen darauf vorhanden sind. Dynamische Arrays werden immer freigegeben, sobald ihr Referenzzähler null ist.
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
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 09:19
Kleiner Einspruch: es handelt sich ja um ein dynamisches Array, und da gilt (http://docwiki.embarcadero.com/RADSt...amische_Arrays)
Zitat:
Dynamische Array-Variablen sind implizit Zeiger und werden mit derselben Referenzzählung verwaltet wie lange Strings. Um ein dynamisches Array freizugeben, weisen Sie einer Variable, die das Array referenziert, den Wert nil zu, oder Sie übergeben die Variable an Finalize. Beide Methoden geben das Array unter der Voraussetzung frei, dass keine weiteren Referenzen darauf vorhanden sind. Dynamische Arrays werden immer freigegeben, sobald ihr Referenzzähler null ist.
Danke wollte es gerade posten......
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 12:10
Delphi-Quellcode:
var
  Destination, Source: Pointer;
  MemorySize: SIZE_T;
begin
 ...
   MemorySize := SizeOf(Short);
   Destination := Pointer(NativeUInt(@buffer[0]) + K * MemorySize);
   Source := @A2[K];
   MoveMemory(Destination, Source, MemorySize);
Das ist keine schlechte Erklärung bzw. zu zeigen wie MoveMemory Arbeitet.
Aber sorry hier eine Funktion in 20 teile zu zerlegen macht nicht wirklich sinn.
Hilfsvariablen und Funktionen einzurichten mach sinn bei immer widerkehrenden Mechanismen aber nicht bei einer Zeile Code.
Habe noch nirgends gesehen das jemand CopyMemory in 100 Zeilen zerlegt.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 12:45
Delphi-Quellcode:
var
  Destination, Source: Pointer;
  MemorySize: SIZE_T;
begin
 ...
   MemorySize := SizeOf(Short);
   Destination := Pointer(NativeUInt(@buffer[0]) + K * MemorySize);
   Source := @A2[K];
   MoveMemory(Destination, Source, MemorySize);
Das ist keine schlechte Erklärung bzw. zu zeigen wie MoveMemory Arbeitet.
Aber sorry hier eine Funktion in 20 teile zu zerlegen macht nicht wirklich sinn.
Hilfsvariablen und Funktionen einzurichten mach sinn bei immer widerkehrenden Mechanismen aber nicht bei einer Zeile Code.
Habe noch nirgends gesehen das jemand CopyMemory in 100 Zeilen zerlegt.
Aus einer unübersichtlichen Zeile werden vier. Nur drei, wenn man sich das spart die MemorySize hinzuschreiben. Plus halt die übliche Variablendeklaration.

Das ist kaum Overhead, ist besser lesbar und vor allen besser debugbar.

Wenn du es gleich so hingeschrieben hättest, dann hättest du auch sofort verstanden wo dein Problem liegt.
So haste erstmal ewig rumgeflucht und gedacht das Delphi sich hier anderes als C++ verhält bei einer WinApi-Funktion.
Das dem nicht so ist, siehste ja jetzt.

Die Leute, die solche Sachen nicht in "100 Zeilen" (danke für die schlechte Polemik) zerteilen (müssen), wissen in der Regel aber auch was sie tun.
Du bist - wie du selber betonst - halt Laie und manche Feinheiten sind dir fremd oder unverständlich (C++-Char -> Delphi-Byte, Größen von Datentypen, Operator-Überladung, Zeigerarithmetik...etc.).
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 12:47
Zitat:
Du bist - wie du selber betonst - halt Laie und manche Feinheiten sind dir fremd oder unverständlich (C++-Char -> Delphi-Byte, Größen von Datentypen, Operator-Überladung, Zeigerarithmetik...etc.).
Richtig dessen schäme ich mich nicht.

Aber wenn ich jede mir bekannte API in ihre Bestandteile zerlegen würde hätte ich keine zeit mehr für andere Dinge

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 13:08
Zitat:
Du bist - wie du selber betonst - halt Laie und manche Feinheiten sind dir fremd oder unverständlich (C++-Char -> Delphi-Byte, Größen von Datentypen, Operator-Überladung, Zeigerarithmetik...etc.).
Richtig dessen schäme ich mich nicht.

Aber wenn ich jede mir bekannte API in ihre Bestandteile zerlegen würde hätte ich keine zeit mehr für andere Dinge

gruss
Bei den unnötigen Wust an Quelltext, den du eh schreibst, fällt das nicht weiter ins Gewicht.
Und vielleicht machst du es nur da, wo du Probleme hast. Egal ob Verständnis-, Compiler- oder Laufzeitprobleme.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 15:58
Zitat:
for K := 0 to Count do // Warum nicht Count-1? Wenn z.B Count 1 ist kopierst Du 2 Einträge?
Weil dann 1 Eintrag fehlt?

Das höchste Array Element ist "13" UB

Die Einträge gehen von 0 - 13 = 14 Einheiten
12 für meine Bilder und 2 für den linken und rechten Pfeil zum scrollen.

Würde ich jetzt (Count - 1) = 13 Einheiten nehmen würde mir der rechte Pfeil fehlen.

Zitat:
buffer[K] := A2[K]; // Warum das Pointer geschubse? Einfach zuweisen was anderes macht der C Code auch nicht
Gute Idee möchte aber MoveMemory behalten wegen der Kompatibilität zum original source so kann ich eventuelle Fehler besser analysieren.

gruss

Geändert von EWeiss (24. Nov 2017 um 16:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:23 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