关于IAR Embedded Workbench.map文件及MK60DN512VLQ10内存分配的问询
解答MK60DN512VLQ10芯片IAR .map文件的内存疑问
Hey, let's clear up your confusion about the memory categories in the IAR .map file for your MK60DN512VLQ10 (512KB Flash, 128KB RAM) chip:
三类内存的存储位置
- 158,852字节只读代码内存:这部分是你的程序核心指令(比如函数实现、中断服务程序),百分之百存在Flash中。MK60的Flash是只读存储介质,专门用来存放固化的可执行代码,完全匹配只读代码的属性。
- 18,446字节只读数据内存:这类是编译时就确定的常量数据——比如
const修饰的全局变量、字符串字面量,同样存储在Flash里。把只读数据放在Flash能省下RAM空间,毕竟RAM资源比Flash更宝贵。 - 22,532字节读写数据内存:这部分涵盖了全局变量、非
const的静态变量,还有程序运行时的栈(Stack)和堆(Heap),全部存在RAM中。RAM的可读写特性正好满足这类数据在运行时需要修改的需求。
内存占用是否会在运行时变化
- 只读代码和只读数据的大小是固定不变的:它们在编译链接阶段就已经确定,烧录到Flash后就不会再改变,属于芯片内存的固定总占用部分。
- 读写数据的大小会随程序运行动态变化:
- 其中全局变量、非
const静态变量的占用是编译时确定的,属于固定部分; - 栈的占用会随着函数调用深度变化——比如递归调用、多层函数嵌套时,栈的使用量会增加;
- 堆的占用则取决于你使用
malloc()/free()这类动态内存分配函数的操作:申请内存时堆占用上升,释放时下降。
- 其中全局变量、非
- 补充一下:.map文件里显示的读写数据大小,一般是静态固定占用加上你在IAR配置中预留的栈/堆空间,实际运行时的真实占用会根据程序的执行行为产生波动。
内容的提问来源于stack exchange,提问作者Yavni




