2013-03-18 10 views
5

Ich frage mich, ob die Bezugsgrössen wie c in diesem Code:Sind Referenzen auf dem Heap oder Stack gespeichert?

int a = 5; 
int & c = a; 

aus Heap oder Stapel zugeordnet sind. Kann jemand helfen? Danke

+1

Referenzen sind keine Objekte. –

+0

Dies beantwortet alles [Wie sieht eine C++ - Referenz aus, Speicher-weise?] (Http://stackoverflow.com/a/38310081/6186415) –

Antwort

13

Ein Verweis ist nur ein Alias, und es ist nicht durch den C++ 11 Standard angegeben, ob es tatsächlichen Speicher erfordert oder nicht.

Per Ziffer 8.3.2/4 des C++ 11 Standard:

Es ist nicht spezifiziert, ob ein Verweis erfordert Speicher (3.7).

+0

Also meinst du die Antwort ist unbekannt? –

+0

@ YasinRazlık: Ich würde eher sagen, die Antwort ist irrelevant. Und in den meisten Fällen glaube ich, dass überhaupt kein Speicher zugewiesen wird: Eine Referenz ist nur ein Alias, keine Variable, die eine Speicheradresse enthält (wie ein Zeiger). –

+1

@ YasinRazlık die Antwort, dass es egal ist. – juanchopanza

4

Referenzen sind nur Aliase und müssen nicht an einer bestimmten Stelle zugewiesen werden. Der Standard spezifiziert diese Art von Details nicht, bis zu dem Punkt, wo Referenzen überhaupt noch nicht gespeichert werden müssen.

2

Egal, eine Referenz ist nur eine Konstante automatisch Zeiger ohne Zeiger Zeigerarithmetik und ohne die Option eines Null oder unbestimmten Wert.

In Bezug auf die neu formulierte Frage - die Art, wie Referenzen verwendet werden, impliziert, dass sie meist Stapel zugeordnet werden. Das ist in allen nicht statischen Szenarien der Fall, in denen der Speicher nicht weggelassen werden kann. Und das ist C++, eine Hochleistungs-Programmiersprache, die alles auslässt, was nicht benutzt wird.

0

Die meisten Compiler betrachten Referenzen als eingeschränkte Zeiger.

Verwandte Themen