AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Mit einer kurzen Prozdur einen Schlüssel erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Mit einer kurzen Prozdur einen Schlüssel erzeugen

Ein Thema von kurtm1 · begonnen am 25. Apr 2004 · letzter Beitrag vom 26. Apr 2004
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von The-X
The-X

Registriert seit: 30. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#21

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen

  Alt 26. Apr 2004, 13:46
er würfelt nur die Reihenfolge der Zeichen in dem vorher sortierten String um,
somit ist kein Zeichen doppelt vorhanden, da nur z.B. die Position von a mit der von g getauscht wird
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen

  Alt 26. Apr 2004, 13:49
@The-X: Jetz wo dus sagst seh ichs auch. Man, auf sowas simples muss man erstmal kommen. Dadurch das ich irgendwie davon ausging das, der algo gleich arbeitet wie die vorhergehenden, hab ich das gar ni mitbekommen. Thx
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#23

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen

  Alt 26. Apr 2004, 16:36
Zitat:
Wusste ich doch das Hagen das mal irgendwo geschrieben hat. Darum verwende ich in einer Funktion immer temp_Variablen und setze Result ganz am ende der Funktion.
Das bezog sich damals auf was anderes.

Der obige Code ist deshalb effizienter weil er den 26 Zeichen umfassenden Speicherblock in Result nur EINMAL auf dem Heap alloziert.

Bei Result := Table; wird nur ein 4 Bytes Zeiger auf Table initialisiert. Table und Result zeigen in den gleichen Speicherbereich in dem "abcd...." stehen. Nun wird die Schleife ausgeführt. Innerhalb dieser Schleife erkennt der Compiler das Result geändert wird. Bevor er diese Änderung durchführt wird überprüft ob der Referenzzähler des gemeinsamen Strings 1 ist. Da er bei der ERSTEN Modifikation noch 2 ist wird nun auf dem Heap ein neuer Speicherbereich von 26 Zeichen alloziert und "abcdef..." dahinein kopiert. Ab diesem Moment ist der Referenzzähler von result == 1 und es wird NICHTS mehr kopiert. D.h. 26 mal wird nur 1 Zeihen = 1 Byte im String Result mit einem anderen Byte ausgetauscht.

Im ersten Vorschlag sieht die Sache anders aus. Durch Result := Result + x; wird 26 Mal der Speicherbereich in Result um jeweils 1 Zeichen vergrößert. Im schlechtesten Falle muß also Result 25 mal umkopiert werden um Plattz für dieses eine neue Zeichen zu haben. Insgesammt würden dann statt einmal 26 Bytes Kopieren, somit 1+2+3+4+5+6+7+8+9+10+11+12+12+14+15+16+17+18+19+2+ 21+22+23+24+24+25 = 325 Bytes kopiert. Aber diese Kopiererei ist noch nicht alles, denn damit kopiert werden kann benötigt man natürlich zusätzlichen Code der ausgeführt werden muß, was ebenfalls die Performance reduziert. Ein zusätzliches Copy() würde die Sache nochmals ineffizienter machen, da durch das Copy() wiederum eine zusätzliche Stringallokation anfallen würde.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 11:59 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