const_cast a wydajność

0

Witam

Jak wygląda sprawa const_cast z poziomu asemblera?

To kod przykładowy, nie wgryzajmy się w niego


void Funkcja(const Object* object)
{
      const_cast<Object*>(object);
}

czy coś takiego nie zmusza do przekopiowania całego obiektu z pamięci read-only do innej?

0

Wątpię, żeby kompilator w ogóle wrzucał const obiekty w pamięć read-only.

Dla przykładu, jeśli mamy wskaźnik na void to jak wtedy kompilator miałby sobie przekopiować?

0

Nie istnieje wcale, wewnętrznie wszystkie pointery są takie same, const to tylko "obietnica" na poziomie kodu źródłowego, z której programista nie musi się wywiązywać.

0

Pamięć read-only istnieje, tzn przynajmniej w x86 można sobie oznaczyć stronę pamięci jako read-only, jest nawet funkcja w WinAPI do tego: http://msdn.microsoft.com/en-us/library/aa366898(v=vs.85).aspx

0

Ależ oczywiście, że istnieje, po prostu pamięć procesu ma się nijak do słówka const w C++, które to istnieje wyłącznie na etapie kompilacji (z małym wyjątkiem - sekcja .rdata trzymająca globalne lub statyczne stałe, której istnienie jest zresztą opcjonalne, to kwestia inwencji kompilatora). const ma informować kompilator, że użytkownik nie powinien próbować obiektu zmieniać, na wypadek gdyby mu się o tym zapomniało.

0

Jednak kompilatory w ramach optymalizacji często zmienne const po prostu traktują jak #define (oczywiście na wysokich stopniach optymalizacji).

0

const_cast i reinterpret_cast w skompilowanym programie nie istnieją. to tylko element składni języka, jak klamry czy nawiasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1