Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie funkcji + poboczna dyskusja o referencji

Ostatnio zmodyfikowano 2012-09-25 21:24
Autor Wiadomość
cyklopek11
» 2012-09-25 20:34:50
Patrząc z punktu widzenia systemu komputerowego 32-bitowego (32-bitowego rejestry ogólnego przeznaczenia procesora a nie system operacyjny) i z poziomu asemblera w trybie chronionym (to co mogą wykorzystać standardowi programiści) "wskaźnik" nie może mieć większego rozmiaru niż 32-bity. Przekładając to na język wysokiego poziomu (np. c/c++ na platformie Windows) tam też wskaźniki nie mogą mieć większego rozmiaru niż 32-bity. Nawet gdyby spróbować zaimplementować klasę która by przechowywała "większy adres" to co programista zrobi z tak dużym adresem powyżej 32-bitów skoro ma do dyspozycji tylko 4GB przestrzeni wirtualnej procesu? (naprawdę 2GB, resztę zżera kernel). Oczywiście taki wskaźnik może pokazywać na dane (pierwszy bajt danych) które mogą mieć i 4GB wielkości.
A to, że przed kompilacją w c/c++ "posiada" dodatkową "wiedzę" na co pokazuje nie przeliczałbym na jego wielkość (nigdy nie spotkałem się z tym , żeby ktoś kto programuje w c/c++ oceniał jak wielką "wiedzę" ma wskaźnik ze względu na co pokazuje). Po asemblacji cała jego wiedza ginie (zostaje zaimplementowana w kodzie maszynowym).
Z kolei mając platformę z procesorem posiadającym 64-bitowe rejestry ogólnego przeznaczenia to tam wskaźniki mogą mieć co najwyżej 64-bit.
P-65550
m4tx
» 2012-09-25 20:39:20
co programista zrobi z tak dużym adresem powyżej 32-bitów skoro ma do dyspozycji tylko 4GB przestrzeni wirtualnej procesu?
Niezupełnie. Istnieją sterowniki (or something...) (nie pamiętam już na obecną chwilę, jak się nazywają i nie wiem, czy nie są one też przypadkiem Linux-only), które pozwalają używać więcej niż 4GB RAM-u w systemach 32-bitowych.
P-65554
ison
» 2012-09-25 20:44:01
@cyklopek11 owszem ale my mówimy tu o pojęciu wskaźnika w C++, po prostu są takie 'wskaźniki', które mają więcej niż 32 bity pod 32 bitowym systemem w C++, deal with it :) To co mówisz to prawda, adres każdej komórki w pamięci jest opisany przez 32 bity w takim przypadku, ale w przypadku tworu nazywanym wskaźnikami w C++ tak być nie musi.

A to, że przed kompilacją w c/c++ "posiada" dodatkową "wiedzę" na co pokazuje nie przeliczałbym na jego wielkość
sizeof zwraca faktyczny rozmiar w bajtach w czasie run-time a nie przed kompilacją

(nigdy nie spotkałem się z tym , żeby ktoś kto programuje w c/c++ oceniał jak wielką "wiedzę" ma wskaźnik ze względu na co pokazuje)
to widocznie mało ludzi spotkałeś :p
P-65557
Mrovqa
» 2012-09-25 20:59:55
sizeof zwraca faktyczny rozmiar w bajtach w czasie run-time a nie przed kompilacją
W czasie kompilacji jest wyliczany i w skompilowanym pliku siedzi jako stała.
P-65560
cyklopek11
» 2012-09-25 21:10:11
ison chyba mówimy o dwóch różnych rzeczach. Pod pojęciem rozmiar wskaźniaka rozumiem wielkość (w bajtach, bitach) liczby całkowitej unsigned (np. unsigned int) określającą adres w wirtualnej przestrzeni adresowej na który to pokazuje. Załóżmy, że stworzysz sobie większy wskaźnik niech będzie: 0xAAAAAAAAA (36-bit). Będąc na platformie 32-bitowej w trybie chronionym mając dostęp do 4GB pamięci wirtualnej i programując w c++ wyjaśnij mi na co będziesz nim pokazywał ???

(Nie włączam tu sterowników i rozszerzonego adresowania)
P-65561
ison
» 2012-09-25 21:14:16
@cyklopek11 Nie zrozumieliśmy się, wskaźnik w C++ to nie to samo co wskaźnik na daną konkretną jednostkę w pamięci stąd wskaźniki na metody w C++ niekoniecznie muszą mieć 32 bity.
Dlaczego zakładasz, że jeśli wskaźnik w C++ ma więcej niż 32 bity to musi to być koniecznie jedna liczba reprezentująca adres w pamięci jednej konkretnej wartości?
P-65562
DejaVu
» 2012-09-25 21:20:24
Czemu dyskutujecie nie na temat?
P-65563
cyklopek11
» 2012-09-25 21:24:58
Fakt, zrobił się mały Off-topic :-)
P-65565
1 2 « 3 »
Poprzednia strona Strona 3 z 3