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

Program który pokazuje jak kompilator rozmieszcza zmienne w pamięci.

Ostatnio zmodyfikowano 2010-09-24 08:53
Autor Wiadomość
marek
Temat założony przez niniejszego użytkownika
Program który pokazuje jak kompilator rozmieszcza zmienne w pamięci.
» 2010-09-21 15:28:12
Programik pokazuje:
1.Jaka jest rola kompilatora.
2.Że zmienna dla człowieka np:
int ai = 1000000
    to dla komputera komórka o adresie nr  2293608.
  Zawartością tej komórki jest liczba 1000000. Występuje tu jednoznaczne przyporządkowanie   ai --> adres 2293608 
3.Jak kompilator rozmieszcza zmienne w pamięci. Nie robi tego przypadkowo, tylko jak dobry księgowy zmienne jednego typu rozmieszcza kolejno w jednym  bloku pamięci.
4.Każdy bajt w pamięci ma swój adres.
5.Każda komórka pamięci to wielokrotność bajtów.
C/C++
#include <iostream>
int main()
{
    using namespace std;
   
    {
        char ach = 'a'; /*Kompilator rezerwuje w komputerze jednorobajtową (bo char) komórkę o adresie &ach
                                 i wpisuje do niej wartość początkową znak 'a' */
        char bch = 'b'; //jw... tylko znak 'b'.
        char cch = 'c'; //jw... tylko znak 'c'.
       
        cout << "Zmienna ach typu char  jest w komorce nr " <<( long ) & ach << " i ma wartosc " << ach << "\n";
        cout << "Zmienna bch typu char  jest w komorce nr " <<( long ) & bch << " i ma wartosc " << bch << "\n";
        cout << "Zmienna cch typu char  jest w komorce nr " <<( long ) & cch << " i ma wartosc " << cch << "\n\n\n";
        /*
            3 pierwsze linijki w bloku to robota tzw. kompilatora, który nazwy zmiennych czytelne dla człowieka, tj.acc,
            bch i cch (inaczej nazwy adresów zmiennych czytelnych dla człowieka) zamienił na adresy zmiennych które są
            czytelne dla komputera.
            Przykładowo, w moim komputerze kompilator zmienił nazwę "ach" na adres nr 2293623 i pod tym adresem umieścił
            znak "a". U Ciebie adres może być inny, ale niekoniecznie.
       
            Wszystkie dane w pamięci komputera umieszczone są w tzw. komórkach . Najmniejszą  komórką jest komórka
            jednobajtowa przeznaczona dla prostych danych np. dla użytych w przykładzie zmiennych znakowych typu char.
            Każdy bajt ma swój numer czyl adres. Inne komórki, które zawierają bardziej skomplikowane dane, są
            wielobajtowe. Np. typ short ma 2 bajty, int 4 bajty, double 8 bajtów itd.
       
            3 następne linijki to już robota właściwego programu. W nim, np. funkcja (long)&ach wyświetla w kodzie
            dziesiętnym nr pierwszego bajtu komórki, w którym mieści się "ach". Ponieważ, jak wspomniałem wcześniej,
            komórka ta jest jednobajtowa, to adres komórki pokrywa się z adresem bajtu.
            W powyższym przykładzie widać, że kompilator jak rzetelny księgowy, dane rozmieścił kolejno.*/
       
       
    }
    {
        short asi = 1000;
        short bsi = 2000;
        short csi = 3000;
       
       
        cout << "Zmienna asi typu short jest w komorce nr " <<( long ) & asi << " i ma wartosc " << asi << "\n";
        cout << "Zmienna bsi typu short jest w komorce nr " <<( long ) & bsi << " i ma wartosc " << bsi << "\n";
        cout << "Zmienna bsi typu short jest w komorce nr " <<( long ) & csi << " i ma wartosc " << csi << "\n\n\n";
        /*
            Przykład analogiczny.
            Użyto zmiennej typu short, która zajmuje 2 bajty i dlatego kolejne adresy różnią się o 2.*/
       
    }
    {
        int ai = 1000000;
        int bi = 2000000;
        int ci = 3000000;
        cout << "Zmienna  ai typu int   jest w komorce nr " <<( long ) & ai << " i ma wartosc " << ai << "\n";
        cout << "Zmienna  bi typu int   jest w komorce nr " <<( long ) & bi << " i ma wartosc " << bi << "\n";
        cout << "Zmienna  ci typu int   jest w komorce nr " <<( long ) & ci << " i ma wartosc " << ci << "\n\n\n";
        /*
            Przykład analogiczny.
            Użyto zmiennej typu int, która zajmuje 4 bajty i dlatego kolejne adresy różnią się o 4.*/
       
    }
    return 0;
}
 
P-22212
SeaMonster131
» 2010-09-21 15:37:29
A jaki masz problem...?
P-22213
marek
Temat założony przez niniejszego użytkownika
» 2010-09-21 15:53:30
Nie mam problemu. Ale jako początkujący, myślę że może się komuś przydać.
P-22214
SeaMonster131
» 2010-09-21 17:07:50
To czemu dałeś w dział "[C/C++] Szukam pomocy" ? Daj w Nasze Prace itp ... :)
P-22218
marek
Temat założony przez niniejszego użytkownika
» 2010-09-24 08:53:14
Tak też zrobiłem i będę robił w przyszłości.
Dzięki
P-22328
« 1 »
  Strona 1 z 1