发布时间:2023-03-25 17:00
他们之间是有个保姆叫:内存管理器 识别老爹的意思(命令)
它们四个之间怎么操作可以看以前的文章:编译器如何把变量写进内存(汇编)
因为STM32是32位单片机,决定了变量的首地址之间相差都是4个字节(32bit)
即使你的变量是只有一个字节的大小,他也是在4个字节的盒子里面,所以指针的大小是4个字节。
用于修饰常量
只读的变量只放在Flash中?只读添加const会节省ram?
当变量并不是很大的时候,const修饰的变量,如果并不是很大,会放.data段。太大的话,会放在Flash上。
.data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写。也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存放在这个区域:
测试指针p占得内存使用sizeof (p)还是sizeof (*p)
char *p;
sizeof(p) ==>4
sizeof(*p) ==>1
为什么sizeof(*p)是1尼,因为你读取到的数是char类型,*p已经解引用了。
确保本条指令不会因编译器的优化而省略
在一些情况下必须要用volatile,例如和硬件相关的都要使用!!!!
文章详解
当main的文件中有static修饰的函数 会优先执行main文件中的函数
赋值方法
外部变量声明,在一个文件中调用另一个文件的变量,且值依然是内存中的值
下面这种会报错:
.\Objects\Template.axf: Error: L6200E: Symbol a multiply defined (by myinit.o and main.o).
存放内存(RAM)地址
程序的执行过程,都会用到RAM中的地址!!!
链表的概念
链表的插入
链表的删除