[Puntos de conocimiento importantes del enlace del ciclo de vida del alcance de la clase de almacenamiento en lenguaje C]

Enlace del ciclo de vida del alcance de la clase de almacenamiento en lenguaje C

He estado aprendiendo lenguaje c por un tiempo, ¿cómo definir cómo se asignan las diferentes variables en nuestra memoria y cuáles son sus respectivos alcances y ciclos de vida? Solo compártelo a continuación.

一、存储类

En general, los métodos de gestión de la memoria son los siguientes:
pila, montón, segmento de datos, segmento bss, segmento de texto
Por ejemplo: las variables locales de la función se asignan en la pila, por lo que se almacena en la pila; la inicialización de la pantalla es Las variables globales que no son 0 se asignan en el segmento de datos, y la pantalla se inicializa en 0 o se asigna al segmento bss para variables globales inicializadas. Es por eso que generalmente necesitamos inicializar al definir variables locales. De lo contrario, su valor puede ser un valor aleatorio, y Al definir variables globales, se pueden no inicializar y también 0 (todo esto depende del rango de memoria en el que se asignan).Los detalles se explicarán a continuación.

二、作用域(描述变量所起作用的范围)

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

De los resultados anteriores, podemos sacar una conclusión simple: el ámbito donde se encuentra la variable funciona entre {}, y si se define una variable global, el ámbito donde termina el programa. La a definida en el ejemplo anterior funciona dentro del alcance del bucle for {}, por lo que se informará un error cuando la a impresa después de {} salte a continuación y la variable no esté definida

三、生命周期

El ciclo de vida es la descripción de cuándo nace una variable y cuándo termina. Estudiar el ciclo de vida de las variables puede ayudarnos a comprender algunas propiedades fenomenales. (El alcance está estrechamente relacionado con la clase de almacenamiento de la variable)

 四、链接属性

1. El programa pasa por el proceso desde el programa fuente hasta el programa ejecutable: compilación
y
propiedades de enlace
(las clases de almacenamiento están estrechamente relacionadas con las propiedades de enlace)

五、linux下c程序的内存映象

1. Segmento de código, segmento de datos de solo lectura
1. El segmento de código también se denomina segmento de texto (.text) en Linux
2. El segmento de datos de solo lectura son los datos que solo se pueden leer y no se pueden escribir cuando el programa se está ejecutando A la constante modificada const se almacena solo en el segmento de datos de lectura.
2. Segmento de datos, segmento Bss
1. Segmento de datos: Muestra las variables globales inicializadas con un valor distinto de cero y las variables locales inicializadas con una modificación estática distinta de cero.
2. segmento bss: muestra variables globales cero inicializadas y no inicializadas
3.
Los programadores de montones solicitan manualmente espacio malloc (aplicación) libre (liberación)
características
del montón de acuerdo con sus propias necesidades 1. El uso es más flexible a través de las propias necesidades del programador Aplicar y liberar
2. Preste más atención a algunos pequeños detalles al usarlo (liberarlo en el tiempo después del uso)
3. Uso repetido (al solicitar espacio, también se aplica y libera continuamente en un área de memoria característica) 4.
Pila
local Las variables se asignan en la pila, y los parámetros de llamada de función también usarán
las características de la pila pila
1. El sistema asigna y destruye automáticamente el espacio de memoria
2. El uso no es flexible y el espacio de memoria no se puede asignar razonablemente de acuerdo con sus propias necesidades
3. Memoria sucia (debido a que el tamaño de la pila también es limitado, cuando se asigna el espacio de memoria en la pila, se usa constantemente en el mismo espacio de pila)
4. Uso repetido
5. Preste atención a problemas como desbordamiento de pila (la variable de definición es demasiado grande y la llamada recursiva se repite)
5. Área de mapeo del núcleo
1. Asigne el programa del núcleo del sistema operativo a esta área
2. Para cada proceso en Linux, piensa que todo el sistema tiene solo él mismo y el kernel
3. Cada proceso vive en su propio espacio independiente, y cada proceso en el espacio 0-3G es diferente (porque la tecnología de dirección de memoria virtual se usa en el kernel), pero el kernel es el único
seis, bajo OS y bajo bare metal Diferencias entre programas c
1. Este código de asistencia se llama código de carga y ejecución, y su función es asignar valores a las variables globales y borrar el segmento bss (la razón por la cual las variables globales inicializadas en lenguaje C son 0 es por this)
2. Las variables de segmento de datos globales y las variables locales estáticas son ambas inicializaciones distintas de cero. Estas disposiciones se inicializan antes que la función principal y son inicializaciones que se realizan durante la reubicación.

六、存储类相关的关键字

1. Solo hay una función de la palabra clave auto: se utiliza para modificar las variables locales
1. La palabra clave auto modifica las variables locales para indicar que esta variable local es una variable local automática, y la variable local automática se asigna en la pila, por lo tanto, si su valor no se inicializa, será aleatorio.
2. Cuando normalmente definimos variables locales, definimos el tipo automático, pero se omite la palabra clave auto. Se puede ver que las variables locales de auto son variables locales ordinarias definidas por defecto.
En segundo lugar, la palabra clave estática
es generalmente estática en el lenguaje C. Solo hay dos usos diferentes
1. El primer uso: se usa para modificar variables locales, parámetros formales, variables locales estáticas, variables locales estáticas y no estáticas La diferencia principal es que la clase de almacenamiento es diferente, las variables locales estáticas se asignan en el segmento de datos o segmento bss, mientras que las variables locales ordinarias se asignan en la pila.
2. El segundo uso: se utiliza para modificar variables globales para formar variables globales estáticas. La diferencia entre variables estáticas y no estáticas (es decir, la diferencia entre variables globales ordinarias es principalmente) sus atributos de enlace son diferentes (a continuación se explicará en detalle qué atributos de enlace específicos son).
Análisis:
1) La clase de almacenamiento de las variables locales estáticas es la misma que la de las variables globales
2) El ciclo de vida de las variables locales estáticas es el mismo que el de las variables globales
3) La diferencia entre las variables locales estáticas y las variables globales es : propiedades de alcance y enlace. El alcance de las variables locales estáticas (igual que las variables locales ordinarias) y los atributos de enlace están vinculados; el alcance de las variables globales es el alcance del archivo (igual que las funciones), es decir, el programa completo.
3. La palabra clave extern
declara variables globales y las variables declaradas con extern se pueden usar entre diferentes archivos c. Si no se usa la declaración extern, se informará un error

demo1.c

inserte la descripción de la imagen aquí

demo2.c

inserte la descripción de la imagen aquí
resultado de la operación
inserte la descripción de la imagen aquí

De los resultados anteriores, la variable val que usamos en la función principal no se declara con extern cuando se define otro archivo, por lo que se informará un error cuando no se pueda encontrar y compilar.
5. La función de la palabra clave de
registro La palabra clave de registro tiene una sola función: la variable modificada por esta palabra clave se asignará en el registro (mejorando en gran medida la eficiencia)
6. La palabra clave volátil
1. La palabra clave volátil: variable y fácil de cambiar la variable modificada por la palabra clave, el compilador no optimizará la variable cuando encuentre la variable modificada por volátil, y no habrá error
2. Cuando la variable sea modificada por volátil, el valor no cambiará cuando el programa continúe, así que tampoco obtenemos el valor que queremos. Por lo tanto, en el caso de (interrupción de variables de referencia en ISR, variables compartidas en multihilo, variables que serán cambiadas por hardware), mejor usamos volatile para modificar la variable
. Siete, la palabra clave restrict
solo se usa para modificar punteros, variables no ordinarias.

七、链接属性


Los atributos de enlace se pueden dividir en: enlaces externos, enlaces internos y sin enlaces de tres
maneras. La vinculación se realiza dentro del ámbito interno y no se puede vincular fuera del archivo c (funciones modificadas estáticas, variables globales) pertenecen a la vinculación interna
3. No vinculación significa que este símbolo no participa en la vinculación, y todas las variables locales (automáticas, estáticas) no pertenecen a ningún vínculo

以上就是C语言中存储类、作用域、生命周期和链接属性相关的知识点了。
熟练的掌握该知识点可以更好的帮助我们对变量的理解,分配方式,存储地方,作用范围,生命周期以及链接属性

Supongo que te gusta

Origin blog.csdn.net/boybs/article/details/122977704
Recomendado
Clasificación