当前位置: 首页>后端>正文

STM32代码中变量定义后的放置位置

写了一个示例代码,如下

int g_var;

int g_var_init_z=0;

int g_var_init =10;

const int? c_g_var;

const int? c_g_var_z=0;

const int? c_g_var_init=20;

int main()

{

? ? static int s_var;

? ? static int s_var_init_z=0;

? ? static int s_var_init =30;

? ? int var;

? ? int var_init_z=0;

? ? int var_init =40;

? ? int tmp= g_var+ g_var_init_z +g_var_init? + c_g_var? + c_g_var_z? + c_g_var_init + s_var + s_var_init_z +? s_var_init + var + var_init_z + var_init;

? ? const int *p[14];

? ? int i=0;

? ? p[i++] = &g_var;? ? ? ?

? ? p[i++] = &g_var_init_z;? ;

? ? p[i++] = &g_var_init? ? ;

? ? p[i++] = &c_g_var? ? ? ;

? ? p[i++] = &c_g_var_z? ? ;

? ? p[i++] = &c_g_var_init? ;

? ? p[i++] = &s_var? ? ? ? ;

? ? p[i++] = &s_var_init_z ;

? ? p[i++] = &s_var_init? ;

? ? p[i++] = &var? ? ? ? ;

? ? p[i++] = &var_init_z ;

? ? p[i++] = &var_init;

? ? while(1)

? ? {

? ? }

}

编译之后,在线运行可以看到,p数组中的数值即为各种变量所存放的地址

结论为:

可读可写的全局变量放置在内存起始位置

然后是静态可读写变量,

然后是初始化为0,或者未初始化的全局变量,未初始化的全局变量会被编译器初始化为0

然后是静态的初始化为0的变量以及未初始化的静态变量,也被编译器初始化为0,

再往后就是进来函数后,定义的局部变量,存放在栈中

还有带有const的只读变量的存储位置为flash中,不需要加载到内存中,读取的时候,直接访问flash即可


https://www.xamrdz.com/backend/38s1931457.html

相关文章: