2010-10-28 11 views
5

Podczas tworzenia czegoś w języku C++ co oznacza, że ​​nie można na przykład niejawnie przekazać go niestanowiącą na niższych poziomach maszyny? W jaki sposób maszyna określa, że ​​jest to const?co sprawia, że ​​const na niższych poziomach maszyny?

(oprócz faktu, że const oznacza, co to znaczy ...)

Czy to chyba zapisane w .rdata sekcji pamięci czy jest tam nieco który pobiera zestaw sprawia, że ​​const, czyli jak to działa ?

Czy ktoś może wyjaśnić?

+0

Głównie nic. –

Odpowiedz

12

const jest głównie kompilacją; nie oznacza to, gdzie mogą być przechowywane w środowisku wykonawczym ani czy mogą być one chronione w środowisku wykonawczym.

W praktyce kompilator może wybrać stałe w sekcji programu pliku wykonywalnego, który może być chroniony przed zapisem przez moduł zarządzania pamięcią (jeśli istnieje). Alternatywnie, kompilator może składać stałe bezpośrednio w kodzie, tak że nawet nie istnieją jako adresowalne lokalizacje.

Alternatywnie może to nie zrobić żadnej z tych rzeczy.

8

const -ness jest prawie zawsze wymuszane przez kompilator, nic więcej, nic mniej. Brak ochrony maszyny.

Edytuj: @Oli Odpowiedź Charleswortha jest lepsza niż moja.

+0

Warto pamiętać, że inteligentne kompilatory mogą również korzystać z tych informacji podczas fazy optymalizacji. –

1

W C++, const, rzadko ma coś wspólnego ze sprzętem. Jest to głównie sposób informowania kompilatora, że ​​pewne rodzaje dostępu powinny skutkować błędem kompilatora.

Jedynym wyjątkiem są statyczne zmienne const typu pierwotnego lub typu POD, które są zwykle połączone w sekcję tylko do odczytu w pliku wykonywalnym i będą powodować błąd strony, jeśli odrzucimy konstytucję i spróbujemy zmodyfikuj jeden z nich.

3

"const" nie musi oznaczać, że pamięć jest tylko do odczytu. Jest to deklaracja, że ​​program C++ go nie zmieni (a tym samym kompilator powinien odrzucić każdą próbę). Nie oznacza to, że wartość się nie zmieni.

Jest całkiem uzasadnione, że zmienna ma wartość "const volatile" (program jej nie zmieni, ale może się zmienić w dowolnym momencie). Port sprzętowy przeznaczony tylko do odczytu może być na przykład taką bestią.

Tak więc na "niższych poziomach maszyny" nic nie trzeba robić. Pamięć jest taka, a programista musi poprawnie zadeklarować.

Powiązane problemy