Вы находитесь на странице: 1из 3

Tipos de almacenamiento

Auto
Concepto:
Sirve para declarar variables automticas o locales. Es el modificador por defecto
cuando se declaran variables u objetos locales, es decir, si no se especifica ningn
modificador, se crear una variable automtica.
Estas variables se crean durante la ejecucin, y se elige el tipo de memoria a utilizar
en funcin del mbito temporal de la variable. Una vez cumplido el mbito, la
variable es destruida. Es decir, una variable automtica local de una funcin se
crear cuando sea declarada, y se destruir al terminar la funcin. Una variable local
automtica de un bucle ser destruida cuando el bucle termine.
Debido a que estos objetos sern creados y destruidos cada vez que sea necesario,
usndose, en general, diferentes posiciones de memoria, su valor se perder cada
vez que sean creadas, perdindose el valor previo en cada caso.
Por supuesto, no es posible crear variables automticas globales, ya que son
conceptos contradictorios.
Formato:
[auto] <tipo> <nombre_variable>;

Register
Indica al compilador una preferencia para que el objeto se almacene en un registro
de la CPU, si es posible, con el fin de optimizar su acceso, consiguiendo una mayor
velocidad de ejecucin.
Los datos declarados con el especificador register tienen el mismo mbito que las
automticas. De hecho, slo se puede usar este especificador con parmetros y con
objetos locales.
El compilador puede ignorar la peticin de almacenamiento en registro, que se
acepte o no estar basado en el anlisis que realice el compilador sobre cmo se
usa la variable.
Un objeto de este tipo no reside en memoria, y por lo tanto no tiene una direccin
de memoria, es decir, no es posible obtener una referencia a un objeto declarado
con el tipo de almacenamiento en registro.
Se puede usar un registro para almacenar objetos de tipo char, int, float, punteros.
En general, objetos que quepan en un registro.
Formato:
register <tipo> <nombre_variable>;
Ejemplo:

#include <iostream>

using namespace std;

void funcion(register int *x);

int main() {
int s[10] = {1, 2, 1, 5, 2, 7, 3, 1, 3, 0};
funcion(s);
return 0;
}

void funcion(register int *x) {


register char a = 'a';

for(register int i=0; i < 10; i++) {


cout << *x++ << " " << a++ << endl;
}
}

Extern
De nuevo tenemos un especificador que se puede aplicar a funciones y a objetos.
O ms precisamente, a prototipos de funciones y a declaraciones de objetos.
Este especificador se usa para indicar que el almacenamiento y valor de una
variable o la definicin de una funcin estn definidos en otro mdulo o fichero
fuente. Las funciones declaradas con extern son visibles por todos los ficheros
fuente del programa, salvo que (como vimos ms arriba) se defina la funcin como
static.
El especificador extern slo puede usarse con objetos y funciones globales.
En el caso de las funciones prototipo, el especificador extern es opcional. Las
declaraciones de prototipos son externas por defecto.
Este especificador lo usaremos con programas que usen varios ficheros fuente, que
ser lo ms normal con aplicaciones que no sean ejemplos o aplicaciones simples.
Formato:
extern <tipo> <nombre_variable>;
[extern] <tipo> <nombre_de_funcin>(<lista_parmetros>);
Static
Cuando se usa en la declaracin de objetos, este especificador hace que se asigne
una direccin de memoria fija para el objeto mientras el programa se est
ejecutando. Es decir, su mbito temporal es total. En cuanto al mbito de acceso
conserva el que le corresponde segn el punto del cdigo en que aparezca la
declaracin.
Debido a que el objeto tiene una posicin de memoria fija, su valor permanece,
aunque se trate de un objeto declarado de forma local, entre distintas reentradas en
el mbito del objeto. Por ejemplo si se trata de un objeto local a una funcin, el valor
del objeto se mantiene entre distintas llamadas a la funcin.
Hay que tener en cuenta que los objetos estticos no inicializados toman un valor
nulo.
Por el contrario, si se le da un valor inicial a una variable esttica, la asignacin slo
afecta a la primera vez que es declarada.
Formato:
static <tipo> <nombre_variable>;
static <tipo> <nombre_de_funcin>(<lista_parmetros>);

Вам также может понравиться