STM32编译的数据到底存在哪里static,extern

常量存在flash当中,也就是const修饰的,只要是用了这个修饰词,就存在flash,代码运行时也不会拷贝到RAM中
因为就CPU读取这方面来说,读取RAM的速度和读取Flash的速度都是一样的(好像是基本一样,AI说的)

变量一定会在RAM中开辟空间,有初始值的变量还会在Flash中占用空间
指针也是变量,容易搞错
image

另外什么是代码?
image
代码到cpu执行经历了什么?
代码经过编译器编译生成了汇编文件(C->汇编),再生成目标文件(我理解中是不完整的二进制文件,这里面包括了汇编写的启动文件编译的.o类型和你写的.c之类的程序编译成的.o)(AI告诉我这些算是半成品,因为没有填写地址,所以不算完整的机器码),再由链接器根据链接脚本合并所有的目标文件分配地址,生成最终的机器码(启动文件虽然和其他的.o文件平级,但是它是被放到Flash开头的),然后烧录进Flash。上电后,CPU从Flash第一个地址读取指令,然后就执行了启动文件那部分汇编,分配RAM空间之类的,最终进入“C”的世界,好像又回来了!
image

image

image

image

image

静态变量或者加上extern的全局变量或者普通全局变量,只是为了方便开发者编写,实际上编译的时候,这几种都会被一样
地对待,统统分配一样的RAM空间,有初始值就.data,没有就.bss,但是有初始值的还会再flash的.data中占用空间,相当于
既占用了RAM,又占用了Flash。
image

posted @ 2026-04-03 14:11  青春猪头青年  阅读(2)  评论(0)    收藏  举报