Chociaż sizeof(ref_var)
zwraca rozmiar przywoływanego obiektu, to w dalszym ciągu wymagane jest miejsce do przechowywania referencji w strukturze, a w powszechnych implementacjach przestrzeń przydzielona do przechowywania odniesienia jest taka sama jak przestrzeń przydzielona do przechowywania wskaźnik. Że nie mogą być wymagane przez normę, ale ten kod przynajmniej pokazuje efekt:
#include <iostream>
using namespace std;
char c1 = 'a';
char &c2 = c1;
struct x
{
char c1;
char c2;
char c3;
char c4;
int i4a;
char &r1;
int i4b;
int i4c;
x() : r1(c1) { }
};
struct y
{
char c1;
char c2;
char c3;
char c4;
int i4a;
int i4b;
int i4c;
};
int main()
{
cout << sizeof(c2) << endl;
cout << sizeof(y) << endl;
cout << sizeof(x) << endl;
return 0;
}
robię nie udaje, że jest to „wielki kod” - nie jest - ale to pokazuje punkt. Zestawione w trybie (64 bity) MacOS X 10.6.4 z C++ kompilator z kompilatora Collection GNU (GCC 4.5.1) wartościowe, wyjście jest:
1
16
24
przypadku zestawiane w trybie 32-bitowym wyjście jest:
1
16
20
pierwszy wiersz wyjścia pokazuje, że „sizeof(ref_var)
” rzeczywiście powrócić rozmiar odwołanie obiektu. Druga linia pokazuje, że struktura bez odnośnika ma rozmiar 16 bajtów.Trzecia linia pokazuje, że bardzo podobna struktura z odniesieniem zawartym w niej na 8-bajtowej granicy (w systemie, gdzie sizeof(int) == 4
) jest 8 bajtów większa niż prostsza struktura w 64-bitowej kompilacji i 4 bajty większa pod 32- bitowa kompilacja. W wyniku wnioskowania część referencyjna struktury zajmuje więcej niż 4 bajty i nie więcej niż 8 bajtów w kompilacji 64-bitowej i zajmuje nie więcej niż 4 bajty w kompilacji 32-bitowej. Sugeruje to, że (w co najmniej jednej popularnej implementacji C++), że referencja w strukturze zajmuje tyle samo miejsca co wskaźnik - jak twierdzono w niektórych innych odpowiedziach.
Może to być zależne od implementacji, ale komentarz, że odwołanie zajmuje tę samą przestrzeń co wskaźnik, jest prawdziwy w co najmniej jednej (raczej szeroko stosowanej) implementacji.
Czy Twoje pytanie brzmi "Czy odniesienia wymagają przechowywania"? Proszę bardziej precyzyjnie. –
Tak, nie jestem do końca pewien, o co dokładnie pytasz. Czy mógłbyś wyjaśnić? –
@Prasoon: Racja, a co ważniejsze, jak to wszystko pasuje do środowiska 64-bitowego? Jeśli char ma 8 bajtów, a char ma 4, równie dobrze mogę zrobić wszystko, jeśli pamięć jest premią w mojej sytuacji. – Fanatic23