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
Fritzew

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

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 07:05
Hall Emil,
nur mal was ich auf die schnell gesehen habe

Delphi-Quellcode:
  FillChar(buffer, sizeof(buffer), 0);
    for K := 0 to Count do // Warum nicht Count-1? Wenn z.B Count 1 ist kopierst Du 2 Einträge?
 // MoveMemory(PByte(@buffer[0]) + K * sizeof(Short), @A2[K], sizeof(Short));
  buffer[K] := A2[K]; // Warum das Pointer geschubse? Einfach zuweisen was anderes macht der C Code auch nicht

   // FillChar(A1, sizeof(A1), 0);
   // FillChar(A2, sizeof(A2), 0);
  A1 := nil; // Das Fillchar kannst Du dir sparen einfach den Speicher freigeben
 A2 := nil;
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 08:47
Delphi-Quellcode:
  A1 := nil; // Das Fillchar kannst Du dir sparen einfach den Speicher freigeben
  A2 := nil;
Das auf nil setzen kannst du dir auch sparen Das gibt keinen Speicher frei, sondern setzt nur 2 Variablen auf nil.
Der Speicher für das Array wird am Ende der Methode automatisch freigegeben.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Fritzew

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

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 08:53
Das auf nil setzen kannst du dir auch sparen Das gibt keinen Speicher frei, sondern setzt nur 2 Variablen auf nil.
Der Speicher für das Array wird am Ende der Methode automatisch freigegeben.
Alte Angewohnheit, wenn ich Speicher hole gebe ich Ihn auch frei
liest sich für mich immer flüssiger.....
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 08:56
Das auf nil setzen kannst du dir auch sparen Das gibt keinen Speicher frei, sondern setzt nur 2 Variablen auf nil.
Der Speicher für das Array wird am Ende der Methode automatisch freigegeben.
Alte Angewohnheit, wenn ich Speicher hole gebe ich Ihn auch frei
liest sich für mich immer flüssiger.....
Etwas auf nil zu setzen gibt aber nichts frei (Außer vllt. durch die gleiche Compiler-Magic die das Array am Ende sowieso automatisch freigibt).
Wenn du wirklich aktiv Speicher freigeben willst, dann benutz zumindest SetLength(array, 0);
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

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
 
#6

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
 
#7

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
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 20:48 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