Wprowadzenie do klas pamięci C.

Każda wartość lub liczba musi być przechowywana w innym miejscu do późniejszego wykorzystania, prawda? Można to zrobić za pomocą zmiennych w C. Zmienne to obszary pamięci używane w naszych programach. Każda zmienna będzie określonego typu, jak liczba całkowita, znak, a także będzie miała określony rozmiar i układ w zależności od ich typu. Każdy typ zmiennej powinien być przechowywany w określonej części pamięci i będzie miał ograniczone lub określone uprawnienia dostępu. Klasy pamięci w C określają, w której części pamięci należy przechowywać każdą zmienną, a także decyduje o zasięgu (widoczności) zmiennej. Istnieją cztery typy klas pamięci - auto, zewnętrzna, statyczna i rejestr. Można podać jeden specyfikator pamięci wraz ze zmienną.

Rodzaje klas przechowywania w C

Rodzaje klas przechowywania w C są następujące

1. Automatyczna klasa przechowywania

Wszystkie zmienne zadeklarowane w ramach funkcji lub bloku będą domyślnie przechowywane w automatycznym specyfikatorze, nawet jeśli nie zostaną wyraźnie zdefiniowane. Specyfikatorem tej klasy pamięci jest „auto”. Zakres lub widoczność zmiennych w automatycznej klasie pamięci jest lokalny dla bloku lub funkcji, która jest zdefiniowana. Zmienna zostanie zniszczona, gdy wyjdziemy z funkcji lub bloku.

Można to lepiej wyjaśnić na przykładzie. Rozważ przykład podany poniżej:

Kod:

int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)

Wynik:

4

2)

W tym przypadku najpierw deklarowana jest zmienna I typu liczba całkowita z przypisaną jej wartością 2. Następnie wewnątrz pętli lub bloku ponownie deklarowana jest zmienna I tego samego typu liczb całkowitych z przypisaną jej wartością 4. Jeśli specyfikator pamięci nie jest wymieniony, domyślnie zostanie uznany za automatyczny. W pierwszej instrukcji printf, która jest wymieniona w bloku, wydrukuje 4 po wydrukowaniu wartości I. Podczas gdy w drugiej instrukcji printf, która jest wymieniona poza blokiem, wydrukuje wartość I jako 2, wartość wymienioną na zewnątrz blok. Lepiej jest zainicjować pewną wartość do zmiennych automatycznych, ponieważ istnieją szanse na uzyskanie jakiejkolwiek wartości śmieciowej, jeśli inicjalizacja nie zostanie wykonana. Ten przykład daje jasny obraz zmiennych automatycznych i zakresu lokalnego.

2. Zarejestruj klasę pamięci

Zmienne przechowywane w klasie pamięci rejestru będą miały również zasięg lokalny, co oznacza, że ​​jest dostępna lub widoczna tylko w bloku, w którym została zadeklarowana. Ta pamięć jest podobna do automatycznej, ale główna różnica polega na tym, że zmienne automatyczne są przechowywane w pamięci, podczas gdy zmienne rejestru są przechowywane w rejestrach procesora. Odbywa się to, jeśli chcemy bardzo często uzyskiwać dostęp do zmiennej. Można je wykorzystać szybciej. Tylko kilka zmiennych jest przechowywanych przy użyciu specyfikatorów rejestru. Jeśli w rejestrze nie ma miejsca, to jest ono przechowywane tylko w pamięci. Żadna wartość początkowa nie jest przypisana do zmiennych rejestru. Ponadto operator & (adres) nie może być używany w zmiennych rejestru. Na przykład zmienne używane dla liczników lub podobne typy użycia są przechowywane przy użyciu specyfikatora rejestru.

3. Statyczna klasa przechowywania

Zmienna, może być globalna lub lokalna, jest przechowywana przy użyciu specyfikatora statycznego w klasie pamięci statycznej, gdy zmienna musi zostać zadeklarowana raz, a wartość musi zostać zachowana. Gdy zmienna zostanie zadeklarowana jako statyczna, wartość zostanie zapisana lub zachowana między wywołaniami funkcji. Pamięć stała jest tworzona i deklarowana tylko raz. Kiedy zmienna lokalna jest zadeklarowana jako statyczna, tworzona jest dla niej pamięć stała, a wartość jest zachowywana za każdym razem, gdy jest używana. Również zgodnie z zakresem zwykłej zmiennej lokalnej statyczne zmienne lokalne są widoczne tylko dla funkcji lub bloku, w którym jest zdefiniowana. Gdy zmienna globalna jest zadeklarowana jako statyczna, podobnie jak statyczna lokalna, tworzona jest pamięć trwała i deklarowana jest tylko raz. Ale nawet jeśli ma charakter globalny, zmienne te są widoczne tylko w pliku, w którym są zdefiniowane.

Zmienne statyczne można wyraźnie zobrazować na poniższym przykładzie:

Kod:

int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)

Wynik:

2)

4

Tutaj, w powyższym programie, gdy wywoływana jest funkcja samplefunc (), zmienna a jest definiowana i inicjalizowana po raz pierwszy, a dla niej tworzona jest pamięć stała. Dzięki wyrażeniu matematycznemu użytemu w funkcji wartość a staje się wtedy 2. Jednak gdy ten sam przykładowyfunc () jest wywoływany drugi raz, zmienna a nie jest definiowana ani inicjowana ponownie, a raczej przyjmuje ostatnią zachowaną wartość i kontynuuje operację co daje wynik końcowy jako 4. Jest to główne zastosowanie i zaleta zmiennych statycznych.

4. Zewnętrzna klasa przechowywania

Zmienna zadeklarowana jako zewnętrzna, pokazuje, że zmienna jest zdefiniowana gdzie indziej w innym programie. Te zewnętrzne zmienne są używane, gdy chcemy, aby dowolna zmienna lub funkcja zdefiniowana w jednym programie była używana również w innym pliku. Zmienne ze specyfikatorem zewnętrznym są przechowywane w klasie pamięci zewnętrznej. Kiedy zmienna jest zadeklarowana jako zewnętrzny, to program określa powiązanie zewnętrzne, a zatem nie jest definiowana ani inicjowana ponownie. Magazyn jest przydzielany tylko jeden, a także inicjowany tylko raz. Jeśli zmienne zewnętrzne zostaną ponownie zainicjowane przy użyciu innej wartości w programie zewnętrznym, otrzymamy błąd informujący o „Redefinicji zmiennej”.

Zmienne zewnętrzne wyjaśniono na poniższym przykładzie:

Kod:

Prg1.c

int count;
int main() (
count = 10;
)

Prg2.c

extern int count;
int main() (
printf(“%d”, count);
)

Wynik:

10

Tutaj liczba zmiennych całkowitych jest zadeklarowana w pierwszym programie C (Prg1.c), a wewnątrz funkcji głównej jest inicjowana na wartość 10. W drugim programie C ta sama zmienna zliczania jest deklarowana przy użyciu specyfikatora zewnętrznego, który określa, że istnieje połączenie zewnętrzne, a wartość jest pobierana z pamięci, a wartość 10 jest podawana do licznika wartości, gdy drukujemy go w drugim programie. Jest to użycie zmiennych zewnętrznych. Zatem, w zależności od różnych celów, każda klasa pamięci jest używana dla odpowiednich zmiennych i jest zadeklarowana za pomocą odpowiednich specyfikatorów.

Polecane artykuły

Jest to przewodnik po klasach pamięci C. W tym miejscu omawiamy typy klas przechowywania, które obejmują klasę automatycznego przechowywania, klasę rejestracji rejestru, klasę przechowywania statycznego i zewnętrzną klasę przechowywania. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Co to jest JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs Visual C ++
  4. Wydajność C a C ++