zoukankan      html  css  js  c++  java
  • STM32内存跟FLASH问题

    RO: 常量

    ZI: 未初始化的全局变量

    RW: 初始化的全局变量

    Code: 程序本身

    Code, RO-data,RW-data ..............flash 

    RW-data, ZIdata...................RAM

    初始化时, RW会从flash被拷贝到RAM

    Program Size: Code=1564 RO-data=336 RW-data=32 ZI-data=1832 

    Code就是flash. 证明: 我现在注释掉一行:

    //delay_ms(300);

    Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832 

    再注释一行:

    //LED1=0;

    Program Size: Code=1548 RO-data=336 RW-data=32 ZI-data=1832 

    再注释一行:

    //LED0=1;

    Program Size: Code=1544 RO-data=336 RW-data=32 ZI-data=1832 

    其他都没变, 只有Code变化了.

    以这个为基础:

    Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832 

    接下来, 加一个static的变量.

    static u8 i;

    Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832 

    发现没有任何变化, 就是静态变量, 你不赋值, 就不占任何空间, 编译器好聪明.

    接着, 声明后马上赋值:

    static u8 i=2;

    编译结果:

    Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832 

    竟然没有任何变化, 也就是说, 只是赋初始值, 也是没有使用的静态变量也不占任何空间.

    加一行代码:

    i=3;

    Program Size: Code=1568 RO-data=336 RW-data=36 ZI-data=1836 

    可以看到Code有变化, RW-data也增加了4个字节, 因为32位的系统的关系吧. 然后ZI也是增加了4个字节 

    如果不赋初始值, 直接后面才给i一个3:

    Program Size: Code=1568 RO-data=336 RW-data=36 ZI-data=1836 

    没变化, 即, static的变量, 申明时就赋值了.

    如果把static去掉, 在函数内申明一个普通变量i, 则:

    Program Size: Code=1560 RO-data=336 RW-data=32 ZI-data=1832 

    跟基础相比:

    Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832 

    除了Code没变化.

    增加define

    #define iah 0x0f

    Program Size: Code=1560 RO-data=336 RW-data=32 ZI-data=1832

    没有任何变化

    即编译期间, 所有define都会被自动替换.

    可见:

    1. Code就是编译后的机器码

    2. RO就是Read Only, 即常量

    3. static的变量, 在初始化的时候, 会从flash放进内存

    4. 普通变量只会在栈和堆中存在, 并存活于函数作用域, 初始化的时候并不占用内存.

    5. 只有const修饰符才会增加RO.

    参考链接:

    http://blog.csdn.net/winmenaruto/article/details/6256770

  • 相关阅读:
    Python学习——Python线程
    Python学习——异常处理
    Python学习——python的常用模块
    Python学习 ——正则表达式
    Python学习——迭代器&生成器&装饰器
    Python学习——内置函数
    Python学习——深浅拷贝
    Python学习——collections系列
    反编译字节码角度分析synchronized关键字的原理
    谈谈数据库隔离级别
  • 原文地址:https://www.cnblogs.com/Montauk/p/5462793.html
Copyright © 2011-2022 走看看