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

  • 相关阅读:
    【转】WINDOWS消息响应,以及处理分派机制
    web服务器分析与设计(四)
    c++ 概念及学习/c++ concept&learning(三)
    c++ 概念及学习/c++ concept&learning(二)
    【重读】The C++ Programming Language/C++编程语言(一)
    web服务器分析与设计(三)
    web服务器分析与设计(二)
    web服务器分析与设计(一)
    c++ 概念及学习/c++ concept&learning(一)
    windows服务1053错误排查
  • 原文地址:https://www.cnblogs.com/Montauk/p/5462793.html
Copyright © 2011-2022 走看看