Wskazniki do funkcji

0

Witam

Czy ktos wie dlaczego wskaznik do funkcji ogolnej zajmuje 4 bajty, a wskaznik do funkcji skladowej 12 bajtow;

Np.:
void (* pF1) (); //wskaznik na funkcje globalna
void (TForm1::* pF2) (); //wskaznik na funkcje skladowa
int liczba1 = sizeof (pF1);
int liczba2 = sizeof(pF2);

tym sposobem okazuje sie ze
liczba1==4
liczba2==12

Dlaczego tak??? przeciez wskazniki w windows zawsze powinny miec 4 bajty, a wynika to z gornego ograniczenia pamieci pojedynczego procesu.

0

Zwykła funkcja to tylko adres skoku.
Funkcja z obiektu operuje na danych z tego obiektu -> wskazuje go ten znany i lubiany this, on musi być przekazany jako parametr - mamy 8 bajtów.
Te pozostałe 4 to nie wiem - kiedyś było tylko 8.
Debager, CPU i zobacz.

0

Wez w ogole obczaj, co to to TForm :D Moze ma jakas "dziwna" skladnie? Jak programowalem w Builderze, to nie bawilem sie jeszcze wskaznikami tak, zebym cos z nich wiedzial za wiele. Wolalem wtedy metody z C, ze zmienne byly globalne itd. Poprzedni rozmowca podal jeden powod pojawienia sie jednej pary int (4 bajtow :) ). Moze sam cos znajdziesz jak wybadasz czym jest TForm ;). Ja nie mam Buildera, wiec nie wiem, BTW - w Windowsie wszystko jest mozliwe ;).

0
marcellli napisał(a)

Czy ktos wie dlaczego wskaznik do funkcji ogolnej zajmuje 4 bajty, a wskaznik do funkcji skladowej 12 bajtow;
(...)
Dlaczego tak??? przeciez wskazniki w windows zawsze powinny miec 4 bajty, a wynika to z gornego ograniczenia pamieci pojedynczego procesu.

Eee tam. Głupoty wypisujesz.
Wskażnik do niestatycznej składowej klasy może mieć nawet 20 bajtów :-P Kwestia interpretacji przez mechanizm PtMF, a nie "wskaźnika pod windows"...

http://www.codeproject.com/cpp/FastDelegate.asp (od sekcji: Member Function Pointers - why are they so complex?)

P.S. I'm back(?)

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