Introducción a las clases de almacenamiento C

Cada valor o número debe almacenarse en algún lugar para su uso posterior, ¿verdad? Esto se puede hacer usando variables en C. Las variables son áreas de almacenamiento usadas en nuestros programas. Cada variable será de un tipo específico como entero, carácter y también tendrá un tamaño y diseño específicos según su tipo. Cada tipo de variable debe almacenarse en una parte específica de la memoria y tendrá permisos de acceso restringidos o específicos. Las clases de almacenamiento en C determinan en qué parte de la memoria debe almacenarse cada variable y también decide el alcance (visibilidad) de la variable. Hay cuatro tipos de clases de almacenamiento: automático, externo, estático y de registro. Se puede mencionar un especificador de almacenamiento junto con la variable.

Tipos de clases de almacenamiento en C

Los tipos de clases de almacenamiento en C son los siguientes

1. Clase de almacenamiento automático

Todas las variables declaradas dentro de una función o bloque, se almacenarán en un especificador automático de forma predeterminada, incluso si no se define explícitamente. El especificador para esta clase de almacenamiento es 'auto'. El alcance o la visibilidad de las variables en la clase de almacenamiento automático es local para el bloque o la función que se define. La variable se destruirá una vez que salgamos de la función o del bloque.

Esto se puede explicar mejor con un ejemplo. Considere el siguiente ejemplo:

Código:

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

Salida:

4 4

2

Aquí, una variable I de tipo entero se declara primero con el valor 2 asignado. Luego, dentro de un bucle o bloque nuevamente, se declara la variable I del mismo tipo entero con el valor 4 asignado. Si no se menciona el especificador de almacenamiento, de forma predeterminada se tomará como automático. En la primera instrucción printf, que se menciona dentro del bloque, se imprimirá 4 al imprimir el valor de I. Mientras que en la segunda instrucción printf que se menciona fuera del bloque, se imprimirá el valor de I como 2, el valor que se menciona fuera el bloque. Es mejor inicializar algún valor en las variables automáticas porque a veces hay posibilidades de obtener un valor basura si no se realiza la inicialización. Este ejemplo ofrece una imagen clara de las variables automáticas y del alcance local.

2. Registrar clase de almacenamiento

Las variables almacenadas en la clase de almacenamiento de registro también tendrán un alcance local, lo que significa que es accesible o visible solo en el bloque en el que se declara. Este almacenamiento es similar al automático, pero la principal diferencia es que las variables automáticas se almacenan en la memoria, mientras que las variables de registro se almacenan en los registros de la CPU. Esto se hace si queremos acceder a la variable con mucha frecuencia. Estos se pueden usar más rápido. Solo unas pocas variables se almacenan utilizando especificadores de registro. Si no hay espacio en el registro, se almacena solo en la memoria. No se asigna ningún valor inicial a las variables de registro. Además, el operador & (dirección de) no se puede utilizar en variables de registro. Por ejemplo, las variables que se usan para contadores o tipos de uso similares se almacenan usando el especificador de registro.

3. Clase de almacenamiento estático

Las variables, ya sean globales o locales, se almacenan utilizando un especificador estático en la clase de almacenamiento estático cuando la variable debe declararse una vez y el valor debe conservarse. Cuando una variable se declara como estática, el valor se guardará o retendrá entre las llamadas a funciones. Se crea almacenamiento permanente y se declara solo una vez. Cuando una variable local se declara como estática, se crea almacenamiento permanente para ella y el valor se retiene cada vez que se usa. Además, según el alcance de la variable local habitual, las variables locales estáticas también son visibles solo para la función o el bloque donde se define. Cuando una variable global se declara como estática, similar a la local estática, se crea almacenamiento permanente y se declara solo una vez. Pero aunque es global, estas variables solo son visibles dentro del archivo en el que se define.

Las variables estáticas se pueden representar claramente con el siguiente ejemplo:

Código:

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);
)

Salida:

2

4 4

Aquí, en el programa anterior, cuando se llama a samplefunc (), la variable a se define e inicializa la primera vez y se crea un almacenamiento permanente para ella. Por la expresión matemática utilizada en la función, el valor de a se convierte en 2. Pero cuando se llama al mismo samplefunc () la segunda vez, la variable a no se define o se inicializa nuevamente, sino que toma el último valor retenido y continúa con la operación haciendo el resultado final como 4. Este es el uso principal y la ventaja de las variables estáticas.

4. Clase de almacenamiento externo

La variable declarada como externa, representa que la variable se define en otro lugar en otro programa. Estas variables externas se usan cuando queremos que cualquier variable o función definida en un programa se use también en otro archivo. Las variables con especificador externo se almacenan en la clase de almacenamiento externo. Cuando la variable se declara como extern es un programa, especifica el enlace externo y, por lo tanto, no se define ni se inicializa nuevamente. El almacenamiento se asigna solo uno y también se inicializa solo una vez. Si las variables externas se inicializan nuevamente con otro valor en el programa externo, obtendremos un error que indica 'Redefinición de la variable'.

Las variables externas se explican utilizando el siguiente ejemplo:

Código:

Prg1.c

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

Prg2.c

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

Salida:

10

Aquí, el recuento de la variable entera se declara en el primer programa C (Prg1.c) y dentro de la función principal, se inicializa en el valor 10. En el segundo programa C, se declara la misma variable de recuento utilizando un especificador externo, que especifica que hay un enlace externo y el valor se obtiene del almacenamiento y el valor 10 se asigna al recuento de valores cuando lo imprimimos en el segundo programa. Este es el uso de variables externas. Por lo tanto, dependiendo del propósito diferente, cada clase de almacenamiento se usa para variables apropiadas y se declara con los especificadores correspondientes.

Artículos recomendados

Esta es una guía de las clases de almacenamiento C. Aquí discutimos los tipos de clases de almacenamiento que incluyen la clase de almacenamiento automático, la clase de almacenamiento de registro, la clase de almacenamiento estático y la clase de almacenamiento externo. También puede consultar los siguientes artículos para obtener más información:

  1. ¿Qué es JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs Visual C ++
  4. Rendimiento C vs C ++