Frage zu Pointern

dammel
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 8. Okt 2004 12:57
Wohnort: Mörfelden-Walldorf
Kontaktdaten:

Frage zu Pointern

Beitrag von dammel »

Ok eigentlich dachte ich ich hätte das verstanden, aber scheinbar haperts doch irgendwo gewaltig deshalb mal ein paar Fragen:

Wie rufe ich denn eine Funktion auf die in einen Pointer speichert?
In diesem Beispiel file_read_block. In der Main wird dort für Funktionen mit Pointern ein &x verwendet...welchen Sinn hat eine Bitweise and Funktion in diesem Falle?
wenn ich Pointer verwende kann ich das ganz normal? Bsp *a = 3? oder muss es dann a = 3 heißen?
und umgekehrt?
wenn ich einer Variablen den Wert eines Objekts des Pointers zuweisen will?
int b = a oder int b = *a?

Danke schonmal vorab.
"Manchen gab Gott die Kraft Dinge zu verändern, mir gab er die Kraft zu ertragen was ich nicht ändern kann."
Frederik Hahn

Christoph-D
Computerversteher
Computerversteher
Beiträge: 325
Registriert: 11. Dez 2005 13:14
Wohnort: Darmstadt

Re: Frage zu Pointern

Beitrag von Christoph-D »

dammel hat geschrieben:Wie rufe ich denn eine Funktion auf die in einen Pointer speichert?
Indem du dieser Funktion einen Pointer übergibst.
In diesem Beispiel file_read_block. In der Main wird dort für Funktionen mit Pointern ein &x verwendet...welchen Sinn hat eine Bitweise and Funktion in diesem Falle?
Das & ist hier der Adress-Operator, der aus einer Variablen einen Pointer macht. Ein Operator in C kann je nach Kontext vollkommen unterschiedliche Bedeutungen haben. Allein der * hat mindestens drei Bedeutungen:
Multiplikation: 2 * 3
Pointer-Deklaration: int* a;
Pointer-Deferenzierung: int = *a;
wenn ich Pointer verwende kann ich das ganz normal? Bsp *a = 3? oder muss es dann a = 3 heißen?
*a = 3;
und umgekehrt?
wenn ich einer Variablen den Wert eines Objekts des Pointers zuweisen will?
int b = a oder int b = *a?
Ebenfalls mit Dereferenzieren: int b = *a;

Was nie verkehrt sein kann zu wissen: a ist äquivalent zu *(a + i). Das heißt anstelle a[0] kann man auch *a schreiben und umgekehrt. Manchmal braucht man das, wenn man z.B. den Index i vorher auf a addieren und das Derenzieren erst später machen möchte.
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)

dammel
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 8. Okt 2004 12:57
Wohnort: Mörfelden-Walldorf
Kontaktdaten:

Beitrag von dammel »

Besten Dank, läuft nun auch, hab nur das Prob das es ewig dauert, ungefähr 3 Minuten...scheint nicht normal zu sein, da im andern Thread jemand nur 1 sec braucht?????
Was könnte prinzipiell falsch sein? Ergebnis kommt zumindest das selbe raus wie die anderen schon gepostet haben 2048 Miss.
"Manchen gab Gott die Kraft Dinge zu verändern, mir gab er die Kraft zu ertragen was ich nicht ändern kann."
Frederik Hahn

Christoph-D
Computerversteher
Computerversteher
Beiträge: 325
Registriert: 11. Dez 2005 13:14
Wohnort: Darmstadt

Beitrag von Christoph-D »

dammel hat geschrieben:Besten Dank, läuft nun auch, hab nur das Prob das es ewig dauert, ungefähr 3 Minuten...scheint nicht normal zu sein, da im andern Thread jemand nur 1 sec braucht?????
Drei Minuten ist definitiv nicht normal. Falls du die Möglichkeit hast, würd ich einen Profiler mitlaufen lassen um festzustellen, welche Funktion am meisten Zeit kostet.
Wenn du keinen Profiler hast, würde ich den Fehler als erstes in der Ein/Ausgabe vermuten und nochmal überprüfen, ob bei einem Cache-Hit wirklich weder aus der Datei gelesen noch in sie geschrieben wird.
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)

Benutzeravatar
DC-GS
Computerversteher
Computerversteher
Beiträge: 330
Registriert: 2. Mär 2006 13:18

Beitrag von DC-GS »

dammel hat geschrieben:Besten Dank, läuft nun auch, hab nur das Prob das es ewig dauert, ungefähr 3 Minuten...scheint nicht normal zu sein, da im andern Thread jemand nur 1 sec braucht?????
Was könnte prinzipiell falsch sein? Ergebnis kommt zumindest das selbe raus wie die anderen schon gepostet haben 2048 Miss.
Ich hab was von ner Sekunde gesagt. Eigentlich hab ich unter einer Sekunde vermutet, aber mit den 3 Minuten kann wirklich was nicht stimmen.

Die wichtigste Frage zuerst:
Lässt du beim ausführen dein Programm auf Konsole protokolieren?
Als ich das gemacht habe ( für jedes i ) hab ich nach 4-5 Minuten mein Programm abbgebrochen. ( kannst stattdessen ne if-Abfrage einbauen, damit nur alle 1000 i ausgabe kommt )

Christoph-D
Computerversteher
Computerversteher
Beiträge: 325
Registriert: 11. Dez 2005 13:14
Wohnort: Darmstadt

Beitrag von Christoph-D »

DC-GS hat geschrieben:Lässt du beim ausführen dein Programm auf Konsole protokolieren?
Als ich das gemacht habe ( für jedes i ) hab ich nach 4-5 Minuten mein Programm abbgebrochen. ( kannst stattdessen ne if-Abfrage einbauen, damit nur alle 1000 i ausgabe kommt )
Die Ausgabe auf der Konsole ist enorm langsam, stimmt. Wenn man trotzdem ausführliche Debug-Ausgaben haben möchte, kann man die Ausgabe in eine Datei umlenken:
$ ./cache > log.txt
Das läuft um Größenordnungen schneller, als alles auf dem Bildschirm anzeigen zu lassen.
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)

dammel
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 8. Okt 2004 12:57
Wohnort: Mörfelden-Walldorf
Kontaktdaten:

Beitrag von dammel »

oh maaan. Jo danke, hätte nicht gedacht das wegen einer Zeile Ausgabe pro Durchlauf das so enorm verlangsamt... Verbesserung von ca 3 min durch entfernen der Ausgabe ^^.
Nun hab ich auch eine sec :D.
Danke nochmal für eure Hilfe :D .
"Manchen gab Gott die Kraft Dinge zu verändern, mir gab er die Kraft zu ertragen was ich nicht ändern kann."
Frederik Hahn

Antworten

Zurück zu „Archiv“