Delete[] und Array-Erkennung
In C wird delete[] verwendet, um Arrays zu löschen, die mit new[] zugewiesen wurden. Woher weiß das System jedoch, dass ein Zeiger auf ein Array zeigt?
Compiler und Betriebssystem
Während die ursprüngliche Frage darauf hindeutet, dass die Sprache oder der Compiler davon nichts weiß Abhängig vom Typ des Zeigers ist die Realität differenzierter. Der Compiler weiß nicht, ob ein Zeiger ein Array oder ein Einzelelementzeiger ist. Das Betriebssystem (OS) kann jedoch die Art der mit new vorgenommenen Zuweisung verfolgen.
Speicherverwaltung
Wenn ein Array mit new[] zugewiesen wird, Speicher wird nicht nur für die Array-Elemente reserviert, sondern auch für Metadaten, die die Array-Größe umfassen. Diese Metadaten werden in einem Header vor den Array-Elementen gespeichert. Wenn delete[] verwendet wird, überprüft das Betriebssystem diesen Header, um die Array-Größe zu bestimmen.
Einzelnes Element vs. Array
Für den Fall, dass ein einzelnes Element zugewiesen wird Bei Verwendung von new (wie int* num = new int(1);) werden keine Metadaten hinzugefügt. Wenn also deleteForMe(num); aufgerufen wird, löscht das Betriebssystem nur ein einzelnes int.
Das obige ist der detaillierte Inhalt vonWoher weiß „delete[]' die Größe des Arrays, das es löscht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!