kiedy otrzymamy adres funkcji lub dowolnego obiektu, czy jest to adres wirtualny lub fizyczny adres tego obiektu?wskaźnik funkcji: adres fizyczny lub wirtualny
10
A
Odpowiedz
11
Czy pytasz ogólnie o wskaźniki?
W większości systemów operacyjnych są to adresy logiczne.
System operacyjny jest odpowiedzialny za przetłumaczenie ich na adresy fizyczne za pomocą mechanizmu pamięci wirtualnej i mechanizmu stronicowania. Jest to niewidoczne dla programu. Dlatego błędny program "uderza w granice" i GPF.
W przypadku niektórych starych systemów (np. DOS) byłyby one fizyczne, co pozwala na nadpisywanie danych w innych częściach pamięci.
7
Zależy od systemu operacyjnego i poziomu działania kodu.
W przypadku normalnego programu użytkownika w nowoczesnym systemie operacyjnym, otrzymasz adres wirtualny.
Powiązane problemy
- 1. tłumaczyć adres wirtualny na adres fizyczny
- 2. Czy pozycja pamięci podręcznej CPU zawiera adres fizyczny lub wirtualny?
- 3. Wskaźnik wirtualny
- 4. Czy konkretny adres wirtualny jest właściwy?
- 5. Parametry funkcji: Kopiuj lub wskaźnik?
- 6. uzyskać fizyczny adres bufora pod Linuksem
- 7. Adres dereferencjonowane wskaźnik skonstruować
- 8. Czy wskaźnik ma również przydzielony adres lub pamięć?
- 9. Klasa wskaźnik funkcji członka
- 10. Uzyskaj adres pamięci wskazywany przez wskaźnik ctypes
- 11. wskaźnik funkcji bez typedef
- 12. Wskaźnik funkcji - 2 opcje
- 13. C: Wskaźnik do funkcji
- 14. Przypnij wskaźnik funkcji
- 15. Jak uzyskać adres fizyczny (adres MAC) adresu IP za pomocą C#?
- 16. Jak uzyskać adres funkcji?
- 17. przekazać tablicę do zawiniętej funkcji jako wielkości wskaźnik + lub zakresu
- 18. Azure Powershell: Uzyskaj publiczny wirtualny adres IP usługi
- 19. MAMP/LAMP natywny lub wirtualny (Virtualbox/VMware)?
- 20. wskaźnik funkcji członka w konstruktorze
- 21. Pisanie wskaźnik funkcji w C
- 22. Jak wywołać wskaźnik funkcji członka?
- 23. Jak utworzyć wskaźnik funkcji noexcept?
- 24. Pierwsze count argument wskaźnik funkcji
- 25. Wskaźnik do szablonu funkcji warstwowej
- 26. wskaźnik funkcji C++ Użytkownik Definicja
- 27. Przekazywanie funkcji wskaźnik w Dlang
- 28. adres funkcji szablonu C++
- 29. Jak wydrukować adres funkcji?
- 30. Wskaźnik do wskaźnika funkcji w C++
ale jeśli uruchomię następujący prog: int main() {int (* p)(); p = main; printf ("% p", p);} podaje adres taki jak 0x80483c4, uważa, że jest to adres fizyczny, dlaczego wirtualny adres głównego startu ma taki duży adres? używam tego na linux.plz wyjaśnić czy się mylę? – mawia
Mylisz się. To jest adres wirtualny. Nikt nie powiedział, że twoja funkcja main() jest ładowana pod adres wirtualny 0. W rzeczywistości, w plikach binarnych ELF (używanych w Linuksie) segment kodu zaczyna się od wirtualnego adresu 0x80482c0, który wygląda dokładnie na prawo (jest jakaś ukryta konfiguracja kod przed głównym()). Należy pamiętać, że wirtualna przestrzeń adresowa jest często nieciągła, a adresy wirtualne są przydzielane tylko w miarę ich używania. Tylko dlatego, że twój program jest załadowany pod adresem 0x80482c0, nie oznacza to, że wszystko pomiędzy nim a 0x0 zostało już przydzielone. –
Jeśli naprawdę chcesz dowiedzieć się, jak program jest zorganizowany w pamięci pod Linuksem, przeczytaj ten artykuł: http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html –