64-bitowa aplikacja: układ w pamięci

64-bitowy system operacyjny odnosi się do szerokości bitów rejestrów ogólnego przeznaczenia. Jest w stanie przetwarzać 64 bity (dane + operacje) naraz.

Wiemy, że aby system 64-bitowy był naprawdę użyteczny, programiści muszą pisać aplikacje 64-bitowe.

Zastanawiam się jednak, jaka jest różnica między aplikacją 32-bitową a aplikacją 64-bitową? Nie pytam, jakie zmiany w konfiguracji muszę wprowadzić, aby skompilować 64-bitową aplikację; zamiast tego chciałbym poznać różnice strukturalne obu aplikacji w pamięci.

Na przykład program C w systemie Linux zazwyczaj wygląda tak w pamięci: 1, segment tekstu 2, inicjowany segment danych 3, niezainicjowany segment danych 4, sterta 5, stos

Wyobrażam sobie, że 64-bitowa aplikacja będzie wyglądać tak samo pod względem struktury układu w pamięci, z wyjątkiem tego, że adres dla każdego bajtu (zakładając system adresowalny bajtów) ma więcej bitów. Jeśli to prawda, co oznacza 64-bitowy? po prostu większa przestrzeń pamięci adresowalnej?

Ponadto, gdy kompilowana jest aplikacja 64-bitowa, załóżmy, że jedna instrukcja w kodzie źródłowym jest wkompilowana w instrukcję add mips w kodzie zespołu:

add $1 $2 $1 // $1 += $2;

Każda instrukcja mipsa jest zakodowana dokładnie w 32 bitach. Więc oto pytanie, czy aplikacja jest skonfigurowana do kompilacji jako aplikacja 64-bitowa, co by byłoadd jak wygląda instrukcja? czy nadal ma 32 bity lub czy jest rozszerzony do 64 bitów, co łamie regułę mipsów? Jeśli nadal ma 32 bity, nie widzę różnicy, jaką sprawia 64-bitowa aplikacja, dzięki czemu „przenosi 64-bitowe os do pełnej gry”.

Proszę, oświeć mnie.

questionAnswers(1)

yourAnswerToTheQuestion