STM32- cinco áreas de la memoria

Las variables locales, variables globales, pila, pila, estática y global

De la memoria de una C / C ++ uso se divide en las siguientes secciones

  • área de pila (stack) - asignado por el compilador libera automáticamente, los parámetros almacenados de funciones, variables locales y similares .
  • Heap (montón) - , si el programador no libera, puede ser recuperado por el sistema operativo por el programador para asignar y liberar al final del programa .
  • Global Area (región estática) (estática) - variables globales y variables estáticas se almacenan en un solo e inicializan las variables globales y estáticas en un área, las variables globales sin inicializar, sin inicializar variables estáticas otra adyacente un área .
  • área literales - cadena constante se coloca aquí .
  • Programa el área de código - el almacenamiento de cuerpo de la función binaria .

Pila (stack) es un bloque contiguo de memoria. Registro (SP) se llama un puntero de pila a la parte superior de la pila. Parte inferior de la pila es una dirección fija. Hay una pila característica, LIFO. Es decir, después de que los datos en una primera extracción.
Heap (montón) se extiende a la estructura de datos de alta dirección no es área de memoria continuo. Esto es porque el sistema es una lista enlazada de memoria libre para almacenar la dirección de una naturaleza discontinua, y la dirección de recorrido de lista es de bajo a direcciones más altas.

Pila (stack) de espacio para las variables locales y la protección de retorno direcciones de sitio, la función de parámetros de función de transferencia isócrona.
Heap (montón) espacio, se utiliza principalmente para la asignación de memoria dinámica, es decir con la variable malloc función de distribución espacial, calloc, realloc y similares son
en el montón. Para STM32F429, por ejemplo, la pila se encuentra en el interior de los archivos startup_stm32f429xx.s:
Aquí Insertar imagen Descripción

  • En lenguajes de alto nivel, las llamadas a funciones, variables definidas en la función se utilizan en la pila (Stack) .
  • asigna Función espacio de las variables obtiene por malloc, calloc, realloc y similares son en el montón (heap) .
  • Todas las funciones se definen globales in vitro .
  • Además, el modificador static después no importa dónde se coloca en una variable estática, almacenada en el área global (área estática)
  • En las variables estáticas de todas las funciones definidas in vitro indica válida en el archivo, el otro archivo no puede extern .
  • cuerpo estático de la función definida en esta función representa sólo es válido en vivo .
  • La función "xiaoshidi" Esta cadena se almacena en la región constante .

Para dar ejemplos específicos para profundizar la comprensión de todos.
archivo main.c:

int a = 0;         //全局初始化区, 可以被其他c文件 extern 引用
static int ss = 0; //静态变量,只允许在本文件使用
char *p1;          //全局未初始化区
void main(void)
{
int b;             //栈
char s[] = "abc";  //栈
char *p2;          //栈
char *p3 = "123456"; //123456\0在常量区,p3在栈上。
static int c =0;         //全局(静态)初始化区
p1 = (char *)malloc(10); //在堆区申请了10个字节空间
p2 = (char *)malloc(20); //在堆区申请了20个字节空间
strcpy(p1, "123456"); /* 123456字符串(结束符号是0,总长度7)放在常量区,编译器可能会
将它与p3所指向的"123456"优化成一个地方 */
}

Las variables locales

Variable definida dentro de una función es variable interna, sólo es eficaz dentro del alcance de la función, la función que está presente sólo en el fin de hacer
uso de ellos, esta función no puede estar fuera de estas variables, que se llaman variables locales.
Utilice la atención variables locales a las siguientes preguntas:

  • Las diferentes funciones pueden utilizar variables del mismo nombre, que representan diferentes objetos sin molestar a los demás.
  • parámetro formal es una variable local.
  • Ámbito de las variables locales dentro de una función.

Las variables globales

Variables dentro de una definición de función es una variable local, y la variable definida fuera de la función a que se refiere como variables externas, lo cual es una variable global. Las
precauciones con las variables globales:

  • Las variables globales de archivos compartidos pueden presentar otras funciones. Su alcance efectivo es empezar a partir de las variables de posición definida sobre el origen del final del archivo.
  • Conjunto de variables globales es aumentar los canales de datos de contactos entre las funciones.
  • Si el mismo archivo de origen, las variables externas y locales del mismo nombre, es una variable local dentro del ámbito de las variables externas están "bloqueados", es decir, las variables externas no funcionará.

La desventaja del uso de variables globales

Programación, se recomienda no crear demasiadas variables globales, principalmente para las tres consideraciones siguientes:

  • Las variables globales durante la ejecución del programa ocupa celda de memoria, en lugar de sólo cuando sea necesario, hasta la unidad de almacenamiento.
  • función universal se reduce, debido a que la función ejecuta una variable externa dependiente de la misma se encuentra. Si se trasplanta una función a otro archivo, sino también las variables externas relevantes y sus valores, junto trasplantar en el pasado.
  • El uso excesivo de variables globales, reducirá la claridad del programa, en particular, una serie de funciones son variables invocado.

Las variables de clase de almacenamiento

Desde el ámbito de aplicación de los puntos variables, se pueden dividir en las variables globales y locales, el valor de la variable de tiempo desde el punto de vista actual, se puede dividir en memoria estática
modo de almacenamiento y un dispositivo de almacenamiento dinámico.

  • almacenamiento estático: medio de almacenamiento de manera fija asignada por el sistema durante la ejecución del programa.
  • El almacenamiento dinámico: durante la ejecución del programa, de forma dinámica la asignación de espacio de almacenamiento requerido manera. Las variables globales se almacenan en la memoria estática, una memoria dinámica puede almacenar los datos siguientes:
  • Funcionar parámetros formales, cuando se llama a la función asignada al almacenamiento de parámetros.
  • Las variables locales (no declarado añadir variable local estática).
  • la protección del sitio y la dirección de retorno de las llamadas a funciones y así sucesivamente.

Utilice estática para declarar variables locales o globales

A veces la esperanza de que el valor de las variables locales de la función al final de la llamada de función no desaparece al tiempo que conserva el valor original de la celda de memoria que está ocupada, no se libera, la próxima vez que se invoca la función, la variable tiene un valor, es decir, la última vez cuando el final de la llamada de función valor. A continuación, puede utilizar la palabra clave static para declarar.
Con el papel de una declaración de variable estática:

  • Las variables locales declaradas como static, a continuación, utilizar la variable no libera durante todo el espacio de la ejecución del programa asignado a la siempre presente.
  • Con la declaración de la variable estática global, el ámbito de las variables del presente documento se limita al módulo (es decir, archivos declaran en).
    Aquí Insertar imagen Descripción
Publicado 33 artículos originales · ganado elogios 21 · vistas 8916

Supongo que te gusta

Origin blog.csdn.net/qq_39400113/article/details/105055346
Recomendado
Clasificación