const_cast a wydajność

Odpowiedz Nowy wątek
2011-07-26 20:28
Du475645
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?

Napisz prosty program, skompiluj do asemblera, przeczytaj co robi. Co do szczegółów odsyłam do man g++ - videl 2011-07-26 20:47

Pozostało 580 znaków

2011-07-26 20:42
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ć?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-07-26 20:45
cpp programmer
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ć.

Pozostało 580 znaków

2011-07-26 20:53
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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-07-26 21:05
cpp programmer
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.

Pozostało 580 znaków

2011-07-26 21:17
0

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


No i można to łatwo sprawdzić, np był już post w którym przetestowałem GCC. - Wibowit 2011-07-26 21:36

Pozostało 580 znaków

2011-07-26 22:59
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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