Können mit new T[] zugewiesene Arrays ihre Größe offenlegen?
Im Gegensatz zu seinem Gegenstück delete[], das von Natur aus die Größe des Arrays kennt Mit einem zugewiesenen Array fehlt in C ein Mechanismus, um die Größe eines mit new erstellten Arrays programmgesteuert zu ermitteln T[].
Eintauchen in die Unterscheidung
Der Kern dieser Ungleichheit liegt in der intrinsischen Natur von delete[]. Während der Kompilierung wird die Größe des Arrays von der Laufzeitumgebung oder dem Speichermanager des Betriebssystems sorgfältig beibehalten. Diese Informationen bleiben jedoch für den Compiler unzugänglich. Umgekehrt kann sizeof(), ein Operand für den Compiler und keine echte Funktion, die Größe dynamisch zugewiesener Arrays nicht bestimmen, da deren Umfang zur Kompilierungszeit ungewiss ist.
Anschauliches Beispiel
Betrachten Sie dieses Codebeispiel:
int *arr = new int[256]; int *p = &arr[100]; printf("Size: %d\n", sizeof(p));
Hier steht der Compiler vor einem verwirrenden Dilemma: Wie um die Größe von p zu bestimmen. Den Zeigern eines Arrays fehlt die inhärente Kenntnis des Anfangs oder Endes des zugewiesenen Speicherblocks. Sie können den Anfang des Blocks, ein bestimmtes Element darin oder sogar eine beliebige Position angeben.
Inhärente Einschränkungen
C- und C-Arrays im Gegensatz zu erstklassigen Arrays Objekte, degenerieren zu Zeigern. Sowohl der Compiler als auch das Programm wissen nicht, ob der Zeiger den Anfang eines neuen Blocks, eines einzelnen Objekts oder einer Zwischenadresse identifiziert.
Diese Entwurfswahl ergibt sich aus der delegierten Natur der Speicherverwaltung in C und C es an den Programmierer und das Betriebssystem weiter. Neue und gelöschte Implementierungen variieren stark je nach Plattform und Szenario und schließen eine Standardisierung innerhalb des C-Standards aus.
Das obige ist der detaillierte Inhalt vonKönnen Sie die Größe eines mit „new T[]' zugewiesenen Arrays in C bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!