AGB  ·  Datenschutz  ·  Impressum  







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

1GB Pointer bekommen

Ein Thema von NickelM · begonnen am 14. Dez 2013 · letzter Beitrag vom 15. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Furtbichler
(Gast)

n/a Beiträge
 
#1

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 16:17
Was willst du eigentlich mit 1GB am Stück?
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 16:35
Naja, es ist einfacher mit einem Pointer, weil ich mit "Pointer-Adressverschiebung" arbeite um die Bytes im Pointer zu interpretieren aller
PInt64(Cardinal(Anfangpointer) + Offset)^ Wenn ich dann mit Offsets und mehrer Pointern (da ich dan die Pointer in nen Array hinterlege) und dann je nach Offset den Pointer wechseln muss, wird mist zuschreiben xD

Geht eigentlich nur um die Einfachheit und das ich nicht so oft direkt aus der Datei lesen muss.
Ich glaube mit mehren Pointern bei 1GB zuarbeiten wird etwa umständlich. besonders, wenn der Bereich von einem Typ (Int64 z.b.) in einen anderen Pointer übergeht, dann muss ich das zwischenspeichern und lesen, das ist Mist.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 16:45
Klingt nach einem Kandidaten für Memory Mapped Files.

Für MMF gibt es auch schon einige Wrapper hier in der DP, z.B. (auf die Schnelle über Google gefunden) diesen. Habe aber bisher keinen davon selbst ausprobiert.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#4

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 17:45
Naja, im Prinzip mache ich ja sowas ähnliches. Ich teile eine Datei in Buffers auf und lese den kompletten Buffer und danach interpretiere ich diesen Buffer. Ich kann dann, wenn die Datie größer ist als der Buffer, den rest oder den nächsten Teil der Datei in den buffer lesen und interpetieren. Es ist mit absicht so gemacht, dass man nur den Buffer interpetiert wird.

Naja ich kann ja mal kurz das Prog erklären, weil ich es sowieso später in die DP setzen wollte.

Das Programm ist dafür da, die Bytes einer Datei zu interpretieren und dadurch Formate zu verstehen und dann Programme zuschreiben, die das Format lesen. Es ist eine Art Tool für Programmierer, die Formate lesen wollen, wo es z.b. keine Docu gibt. Es soll nicht zum Hacken oder sowas animieren xD

Mann kann dann halt die Bytes interpretieren lassen und dafür wäre es am besten einen Pointer für die Daten, die interpetiert werden, zuhaben. Das macht es am einfachsten.

Ich denke aber, das ich wohl den auszuwählen Buffer wohl auf 256 MB begrenzen muss, weil die größen halt selten verwendet werden können.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 16:54
Naja, es ist einfacher
Schon klar. Und was ist, wenn die Datei größer als 1GB ist? 20, 30 100? Ist doch blöd, so eine Lösung, die nur manchmal funktioniert. Machs doch richtig.

Wenn Du in einer Datei einen String der Länge L suchst, dann liest Du dir einen Puffer der Länge P ein, wobei P>L.

Du kannst direkt bis von Position 0..P-L suchen. Dann verschiebst Du die Bytes P-L...P-L-1 an die Stelle 0..L-1 und liest P-L-1 Bytes ab Position L ein. Das ganze wiederholst Du bis zum Ende. Fertig.

Das geht natürlich noch schneller und vielleicht sogar mit MMF, aber eine nette Übung ist es in jedem Fall.

Merke: Mach es richtig UND einfach, nicht einfach nur einfach.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 17:50
Du kannst auch eine MMF nehmen, welche sogar mehr als 4GB vom physischen RAM+Auslagerungsdatei nutzen könnte
und davon wird dann immer nur der grade benötigte Teil in deinen virtuellen Arbeitsspeicher (standardmäßig 2 GB) mappen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 18:26
[OT]
Cool, sowas hatte ich mir schon öfter gewünscht... also so eine Art „Syntaxhighlighting“ für Binärdateien... oder man könnte auch sagen IDA Pro für reine Daten statt für Programme.

Hatte aber nie die Idee, wie man das gescheit umsetzen könnte aufgrund der unendlichen Möglichkeiten, wie ein Format aufgebaut sein könnte. Solange es sich nur um einfache Record-Formate handelt, ist es ja noch einfach, aber was, wenn die Datei aus mehreren Abschnitten oder aus Chunks mit Längenangabe besteht, oder es sich gar um eine Baumstruktur handelt oder oder oder... Ist eigentlich nur mit Scripting zu realisieren, meine ich. Da besteht die Kunst dann darin, eine gute API zu designen.

Würde mich sehr interessieren, was du am Ende zu stande bringst
[/OT]
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#8

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 19:56
[OT]
Jap Geht mir genauso.
Bin noch einige Sachen am Einbauen, wie Ansi- und WideStrings will auch noch abhängigkeiten von anderen "Variablen" einbauen. Bin noch am überlegen, wie ich das mache, werde es aber im Projektbereich hochladen.
[/OT]
Deshalb schreib ich das gerade, hab grad was andere getestet und funkt sogar noch besser.
Warum umständlich, wenns auch einfacher geht

Also hat sich die Frage erledigt.
@Insider2004:
Danke für die Info, weiß ich aber, wegen Ansi-und WideString usw.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#9

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 20:04
Ich rede hier nicht von Strings, sondern von Zeigerarithmetik. Suche Dir mal ein paar Beispiele für Pointer-Math in Google.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: 1GB Pointer bekommen

  Alt 14. Dez 2013, 22:16
... also so eine Art „Syntaxhighlighting“ für Binärdateien...
Das gibt es schon.
Allerdings ist die Technik in Netzwerkscanner wie z.B. Wireshark oder Microsoft Network Monitor eingebaut.
Den Microsoft Network Monitor hat z.B. eine eigene Sprache "Network Monitor Parsing Language" mit der man eigene Protokolle und Datenstrukturen beschreiben kann.
Also wenn man soetwas je selber bauen möchte: dort kann man was abschauen.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:43 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