Heim > Backend-Entwicklung > C++ > Können Sie die Größe eines mit „new T[]' zugewiesenen Arrays in C bestimmen?

Können Sie die Größe eines mit „new T[]' zugewiesenen Arrays in C bestimmen?

DDD
Freigeben: 2024-11-08 05:39:01
Original
428 Leute haben es durchsucht

Can You Determine the Size of an Array Allocated with `new T[]` in C  ?

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));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage