Die Antwort hängt von der Sprache ab, die Sie verwenden.
C / C ++
In C und C ++ war das Schlüsselwort NULL, und was NULL wirklich war, war 0. Es wurde entschieden, dass "0x0000" niemals ein gültiger Zeiger auf ein Objekt sein würde, und das ist der Wert, der zugewiesen wird, um dies anzuzeigen ist kein gültiger Zeiger. Es ist jedoch völlig willkürlich. Wenn Sie versuchen, wie ein Zeiger darauf zuzugreifen, verhält es sich genauso wie ein Zeiger auf ein Objekt, das nicht mehr im Speicher vorhanden ist, wodurch eine ungültige Zeigerausnahme ausgelöst wird. Der Zeiger selbst belegt Speicher, aber nicht mehr als ein ganzzahliges Objekt. Wenn Sie also 1000 Nullzeiger haben, entspricht dies 1000 ganzen Zahlen. Wenn einige dieser Zeiger auf gültige Objekte verweisen, entspricht die Speichernutzung 1000 ganzen Zahlen plus dem in diesen gültigen Zeigern enthaltenen Speicher. Denken Sie daran, dass in C oder C ++,Es wurde kein impliziter Speicher freigegeben, daher müssen Sie dieses Objekt explizit mit dealloc (C) oder delete (C ++) löschen.
Java
Anders als in C und C ++ ist in Java null nur ein Schlüsselwort. Anstatt null wie einen Zeiger auf ein Objekt zu verwalten, wird es intern verwaltet und wie ein Literal behandelt. Dies beseitigt die Notwendigkeit, Zeiger als Integer-Typen einzubinden, und ermöglicht es Java, Zeiger vollständig zu abstrahieren. Auch wenn Java es besser verbirgt, handelt es sich dennoch um Zeiger, was bedeutet, dass 1000 Nullzeiger immer noch das Äquivalent von 1000 ganzen Zahlen verbrauchen. Offensichtlich wird, wenn sie auf Objekte verweisen, ähnlich wie in C und C ++, Speicher von diesen Objekten belegt, bis keine Zeiger mehr auf sie verweisen. In den meisten Fällen müssen Sie nicht nachverfolgen, welche Objekte freigegeben sind und welche nicht (es sei denn, Sie haben Gründe, auf Objekte schwach zu verweisen).