Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Was bedeutet NIL?
jfheins - So 13.11.11 18:29
[url]http://de.wikipedia.org/wiki/Nil_(Begriffsklärung)[/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
Delphi-Laie hat folgendes geschrieben : |
| 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
Bergmann89 hat folgendes geschrieben : |
| 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!