Materiały dotyczące stosów i stert

0

Witam,
czy ktoś mógłby polecić mi jakieś materiały gdzie będą bardzo dokładnie i wyczerpująco opisane tematy które, dotyczą obsługi pamięci w programie.
Dokładniej mam na myśli stosy i sterty.
Wyniki z google dają szczątkowe i niepełne informacje.

0

A std::stack to nie stos?

3

std::stack to adapter na kontener implementujący dostęp zgodny ze standardem stosu. Pierwotne pytanie dotyczyło pamięci w programie C++. Czyli w skrócie "co gdzie trafia" :-)

0

Świetnie dziękuje za link. Właściwie nie wiedziałem, że w c++ nie ma już stosów i stert, lecz moje pytanie odnosiło się zarówno do C++ jak i do C. Pod jakimi hasłami powinienem szukać większej ilości informacji na ten temat?

Kiedy wyszukuje hasła takie jak heap lub stack 99% wyników to implementacje tych struktur danych.

2

Zaszła pewna pomyłka. Pytasz o sposób implementacji umieszczania w pamięci typów danych w C lub C++. Standard języka z rozmysłem nie definiuje takich szczegółów. Są one w gestii osób implementujących działanie i kompilację programu w danym środowisku operacyjnym. Wprawdzie tak dla C jak i C++ znajdziesz sekcję "Memory model" w standardach, ale ona zajmuje się zagadnieniami wielkości danych, wyrównania danych, pracy w wielu wątkach itd. Możliwie agnostycznie w odniesieniu do mechanizmów sprzętowych samego środowiska wykonania.
Tu masz model pamięci dla C++ http://en.cppreference.com/w/cpp/language/memory_model a tu dla C http://en.cppreference.com/w/c/language/memory_model wraz z odnośnikami do rozdziałów standardu. Prace komisji standaryzacyjnej C i C++ znajdziesz na http:://www.open-std.org
To o co pytasz, jest właściwe dla systemu operacyjnego i kompilatora który pracuje w tym systemie. Czasem nawet nie ma systemu operacyjnego (systemy wbudowane). Ramki stosu (stack frame) , sterty (ang. heap), przestrzenie pamięci procesu, jego sekcje itd to zagadnienia do odnalezienia w dokumentacji danego systemu.
Język C++ czy C stawia oczywiście wymagania co do sposobu obsługi w pamięci (np. wymagane jest przetrzymywane danych vector w ciągłej przestrzeni adresowej) ale nie interesuje go np. do jakiego adresu do jakiego rozciąga się ramka stosu procesu, co zawiera oraz jakim mechanizmem sprzętowym/programowym realizowane są alokacje nowych porcji (zwalnianie nowych porcji) pamięci. Np. C (i C++) zapewnia poprawność obliczeń adresów elementów w tablicy do elementu 1 (index 0) do elementu n + 1 (tuż za ostatnim elementem tablicy). Czy następną alokowaną (w ten czy inny sposób) tablicę będziesz miał na "niższych adresach" czy na "wyższych", to już standardu nie obchodzi i to zależy od systemu/sprzętu a często nawet przełączników kompilatora :-)
Mam nadzieję że teraz trochę jaśniej :-)
Szukaj pojęć:
X memory model
X process model
...
gdzie X to system operacyjny lub kombinacja system + kompilator.

1 użytkowników online, w tym zalogowanych: 0, gości: 1