Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Was bedeutet NIL?


Btl - So 13.11.11 18:13

Moderiert von user profile iconNarses: Abgetrennt von [url=http://www.delphi-forum.de/viewtopic.php?t=80930]hier[/url].

was heißt eigentlich nil ?


jfheins - So 13.11.11 18:29

[url]http://de.wikipedia.org/wiki/Nil_(Begriffsklärung)[/url]

Zitat:
in einigen Programmiersprachen einen nicht zugewiesenen Wert ([url=http://de.wikipedia.org/wiki/Nullwert]Nullwert[/url]).

(Abkürzung für "not in list")


haentschman - So 13.11.11 18:34

Hallo...
lt. Wörterbuch 8) ...
Zitat:

Deutsch.................................Englisch
nichts; null; keine; keiner;....none; naught; nil; nowt


Beispiel: Wenn eine Objektinstanz nil ist, dann ist sie leer bzw. enthällt kein Objekt.


Delphi-Laie - Mo 14.11.11 00:07

Not in list - nicht in der Liste - ist m.E. ein wenig irreführend, denn Listen als Datenstrukturen sind n.m.W. nicht zwingend nötig.

Tatsächlich ist nil das Nullelement, der Nullwert in der Welt der Zeiger, ein Zeiger, der nirgendwohin zeigt, nicht einmal zur 0. Speicherzelle.

So, wie die Null das Nullelement in der Welt der Zahlen, der Nullvektor das Nullelement in der Welt der Vektoren, der Punkt das Nullelement in der Geometrie und die leere Menge das Nullelement in der Mengenlehre ist usw. usf., so ist eben nil eben auch ein Nullelement, nämlich in der Welt der Speicheradressierung(en).


bummi - Mo 14.11.11 00:58

und wen es in der Implementierung interessiert

Delphi-Quelltext
1:
Showmessage(IntToStr(Integer(nil)));                    


Bergmann89 - Mo 14.11.11 03:09

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
ein Zeiger, der nirgendwohin zeigt, nicht einmal zur 0. Speicherzelle.

Wenn du Speicherstelle 12345 mit dem Zeiger 0x00003039 (=12345d) adressierst, dann adressierst du die Speicherstelle 0 mit 0x00000000, heißt ein NullPointer (= 0x00000000) zeigt auf die Speicherstelle 0. Oder hab ich jetzt n Denkfehler?! :nut:


Tranx - Mo 14.11.11 04:32

aus Wikipedia:
:
NIL

Einige Programmiersprachen (beispielsweise Pascal, LISP, Smalltalk, Ruby, Objective-C) verwenden die Bezeichnung nil, anstatt Null oder null. Nil steht einerseits für englisch not in list, also nicht in der Liste. Dies hat historische Gründe, es entstammt der Programmiersprache LISP, die als einzige Datenstruktur den in Blattrichtung verketteten Binärbaum kennt, der aber gewöhnlich nur zur Darstellung einfach verketteter Listen genutzt wird. Die Bezeichnung wurde auch für andere Programmiersprachen übernommen, da das lateinische Wort nil soviel bedeutet wie nichts.



NIL = Abkürzung für nihil : nichts (lateinisch). Man sieht, irgendwo sind die alten Römer doch aktiv. ;) Und wenn es im Nichts ist. ;)


Delete - Mo 14.11.11 08:37

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du Speicherstelle 12345 mit dem Zeiger 0x00003039 (=12345d) adressierst, dann adressierst du die Speicherstelle 0 mit 0x00000000, heißt ein NullPointer (= 0x00000000) zeigt auf die Speicherstelle 0. Oder hab ich jetzt n Denkfehler?! :nut:

Im Adressraum eines Prozesses gibt es die sogenannte "Partition für NULL*-Zeigerzuweisungen". Dieser liegt bei Windows20000** im Bereich von 0x00000000 bis 0x0000FFFF (x86). Greift ein Prozess lesend oder schreibend auf Adressen dieses Bereiches zu löst der Prozessor eine Zugriffsverletzung aus. Dies wird von Funktionen genutzt, die Zeiger zurückgeben. Kann kein Zeiger zurückgeben werden, weil das Reservieren von Speicher fehlgeschlagen ist, wird eine Adresse aus dem genannten Bereich zurückgegeben, damit der Programmierer die Chance hat zu prüfen, ob erfolgreich Speicher reserviert wurde. Wäre dem nicht so, hätte der Programmierer nicht die Möglichkeit zu prüfen, ob die Funktion erfolgreich war, weil ja alle Adressen letztendlich irgendwie gültig sind, im Sinne von "existieren". Ob dahinter verwertbare Daten stecken oder nicht, ist was anderes.


*) NULL in C/C++ entspricht nil in Pascal
**) Habe leider keine Literatur für Windows XP und höher


BenBE - Mo 28.11.11 00:07

Das NULL-Segment ist immer exakt eine Guard Page mit der nativ vom OS verwendeten Page Size. Auf 32 Bit sind das 4KiB, bei 64 Bit muss ich nachschauen.

Ist bei Linux übrigens genauso, weil das von der CPU-Architektur kommt.