Ogólnie

 

Co tu dużo pisać. Trzeba uwzględnić asemblera i jego dostęp do rejestrów, wspomnieć o wskaźnikach w C++, i chociażby dynamicznym zarządzaniu w JAVIE.

Języki niskiego poziomu

 

Języki asemblera (zwyczajowo asemblery) to rodzina języków programowania niskiego poziomu, których jedno polecenie odpowiada zasadniczo jednemu rozkazowi procesora. Języki te powstały na bazie języków maszynowych danego procesora poprzez zastąpienie kodów operacji ich mnemonikami. Dzięki stosowaniu kilkuliterowych skrótów poleceń zrozumiałych dla człowieka pozwala to z jednej strony na tworzenie oprogramowania, z drugiej strony bezpośrednia odpowiedniość mnemoników oraz kodu maszynowego umożliwia zachowanie wysokiego stopnia kontroli programisty nad działaniem procesora.

Pamiętajmy, że w typowym asemblerze pracuje się bez użycia pamięci, a do przechowywania danych używa się rejestrów procesora.

Języki wysokiego poziomu

 

W C++ dysponujemy zarządzaniem pamięci dynamicznym. Wywołujemy int x = 4; i nie obchodzi nas gdzie zmienna powstała i co program z nią robi. Musimy pamiętać tylko jaki zmienna ma zakres i typ.
Oczywiście magia tego języka pozwala w każdej chwili skorzystać ze wskaźników bądź referencji i przez *x wyłuskać sobie adres owej komórki. Poza tym, dysponujemy operatorami new i delete które umożliwiają zarezerwowanie miejsca w pamięci i dysponowanie nim jak się chce.
Możemy wspomnieć o typie zmiennych union który umożliwia odwołania do pamięci różnymi drogami, np:

union VECTOR3
{
   // w postaci trójelementowej tablicy
   float v[3];
   
   // lub poprzez odpowiednie zmienne x, y, z
   struct
   {
         float x, y, z;
   };
};



Elementy tablicy v oraz pola x, y, z niejako „wymieniają” między sobą wartości. Oczywiście jest to tylko pozorna wymiana, gdyż tak naprawdę chodzi po prostu o odwoływanie się do tego samego adresu w pamięci, jednak różnymi drogami.

Dynamiczne zarządzanie

 

Jeżeli chodzi o JAVE to miejmy na uwadze, że nie uraczy nas ona operatorami * oraz &. Tam dostajemy tylko słowo new nawet delete nie ma. Nie ma delete bo JAVA włada kontrowersyjnym bardzo garbage collectorem.
Garbage collection (zbieranie nieużytków) to architektura zarządzania pamięcią, w której proces zwalniania nieużywanych jej obszarów odbywa się automatycznie. Mechanizm taki stosuje się na przykład w wysokopoziomowych językach programowania, przy czym za jego obsługę nie odpowiada sam język, lecz wirtualna maszyna.
Z jednej strony jest to przydatne, bo nie musimy pamiętać o nieużywanych obiektach, z drugiej w ogóle nie wiemy co się z nimi dzieje i kiedy się dzieje.