Seite 1 von 1

Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 03:07
von STARGÅTE
Tachchen,

Meine Frage steht eiegntlich schon im Titel:
Wo liegt der Wertebereich von Zeigeren von LinkedListElementen oder Memorys welche Erstellt werden?
Diese Zeiger geben ja trivial gesagt den "Speicherort im RAM" zurück.

Nun benutze ich in PureBasic oft eine Array-LinkedList kombination, ähnlich wie es auch in PB bei Windows, Gadgets usw. gemacht wird.

Ich kann also Elemente durch eine Nummer initiallisieren, oder mit #PB_Any.

Hier ein Beispiel:

Code: Alles auswählen

Structure Element
  x.i
  y.i
EndStructure


Global Dim *Element.Element(10000)
Global NewList Element.Element()


Procedure CreateElement(Element.i, x.i, y.i)
  Protected *Element.Element
  *Element = AddElement(Element())
  Debug "Speicherort: "+Str(*Element)
  If Element >= 0 And Element <= 10000
    *Element(Element) = *Element
  EndIf
  *Element\x = x
  *Element\y = y
  ProcedureReturn *Element
EndProcedure


Procedure DebugElement(Element.i)
  If Element >= 0 And Element <= 10000
    Debug Str(*Element(Element)\x)+","+Str(*Element(Element)\y)
  Else
    ChangeCurrentElement(Element(), Element)
    Debug Str(Element()\x)+","+Str(Element()\y)
  EndIf 
EndProcedure



CreateElement(1, 1, 1)
CreateElement(2, 1, 2)
Etwas1 = CreateElement(#PB_Any, 2, 1)
CreateElement(3333, 1, 3)
Etwas2 = CreateElement(#PB_Any, 2, 2)

DebugElement(1)
DebugElement(2)
DebugElement(3333)
DebugElement(Etwas1)
DebugElement(Etwas2)
Mein Nummern-Array geht von 0 bis 10'000 .
Wir also eine zahl kleiner 10'000 irgendwo übergeben ist mit einer echten NUMMER zu rechnen (also Arrayfeld welches den Pointer zum Element hat); ist die zahl größer wird es ein POINTER sein direkt zum Element.


Problem wäre nun aber wenn der SpeicherOrt eines LinkedListElements unter 10'000 liegen würde...
Daher die Frage würde sowas überhaupt möglichsein ?

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 03:15
von Kaeru Gaman
also wissen tu ich das nicht...
aber da theoretische jedes erzeugte Element unabhängig von Typ überall dort stehen kann wo Elemente stehen können,
und Fred für die internen Elemente als sicher postuliert, dass ihr Handle nicht <10000 sein kann, solltest du auch für Listenelemente davon ausgehen können.

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 06:23
von NicTheQuick
Ich erinnere mich dunkel an einen Thread, der das selbe Thema behandelte. Da ist auch ein Wert erwähnt worden, der die untere Grenze für einen Pointerwert unter Windows angab. Wenn ich mich nicht irre war das $8000 (nicht schlagen, wenn's falsch war). Unter anderen Betriebssystem kann das aber anders sein.

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 15:14
von STARGÅTE
$8000 , also 32'768 , hmm, das klingt "Computermäßiger" als 10'000 :lol:

gut, ich werde dann zunächst erst mal mit meiner 10k -Grenze weiter machen, und dafür n Konstante definieren, u.u. könnte ich ja dann bei Anganben mit echter Quelle, auch auf $8000 gegen, obwohl ich mir wiederum denken könnte das es ein "volles Unicode" ist also bis $FFFF gibts keine Zeiger.

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 15:23
von ts-soft
Was hat das mit Unicode zu tun? Wohl eher mit Highword und Lowword oder
mit signed und unsigned.

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 15:27
von STARGÅTE
hab ich ja gemeint :?

Word , 2 Byte -32768 bis +32767 , signed
Unicode , 2 Byte 0 bis +65535 , unsigned

Seit es .u gibt, ist ein Unicode für mich auch nur ein Typ geworden, wie Ascii auch, halt die unsigned Varianten von Word und Byte. Die haben also keinen bezug zur Zeichentablle ...

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 15:34
von Kaeru Gaman
ich hätte jetzt eigentlich sagen wollen:
"Unicode" ist eine codierung, wie "Ascii", kein Typ. der Typ heißt "unsigned word", auch wenn er in PB mit "u" abgekürzt wird.
Fred hat lediglich eine solche Abkürzung gewählt, weil die unsigned typen in PB für die Charakter-Verarbeitung gedacht sind (deswegen gibt es auch keinen Typen für unsigned Long).
das macht aber noch lange keinen Typen mit der Bezeichnung "Unicode" daraus.
dummer Weise stehen aber die Bezeichnungen "Unicode" und "Ascii" als Typenbezeichnungen in der Tabelle.

... nunja... muss man wohl mit Leben. noch ein Detail was einen PureBasic-Programmierer zur Zielscheibe für C++-Witze machen kann. Bild

Re: Wertebereich von Zeiger von LinkedListElement oder Memory

Verfasst: 16.03.2010 15:51
von Little John
Kaeru Gaman hat geschrieben:dummer Weise stehen aber die Bezeichnungen "Unicode" und "Ascii" als Typenbezeichnungen in der Tabelle.
Das sehe ich mit Erschrecken jetzt zum ersten Mal ... das ist ja ziemlicher Nonsens (regelhaft betriebene Sinnverweigerung). ;-)

Gruß, Little John