单片机内存长度问题。

为什么一旦给K1Star,K2Star,changne这三个全局变量赋值后,内存占用立刻从62变到了197?下面是不赋初值的情况

#include<reg52.h>

sbit L1=P1^0;
sbit K1=P3^4;
sbit K2=P3^5;

**bit K1Star,K2Star,change;**


void KaiGuan()
{
    if((K1^K1Star)||(K2^K2Star))
    change=1;
}


void main()
{
    K1Star=K1;K2Star=K2;
    while(1)
    {
        KaiGuan();
        if(change)
        {
            change=0;
            L1=~L1;
            K1Star=K1;K2Star=K2;            
        }
    }
}


图片说明

这说明编译器有优化,定义但是实际上没有用的变量会在优化的过程中被删除而不实际生成代码和分配存储。

你说的内存占用应该是指生成的hex文件大小。这里首先要明确一下,程序编译链接之后不同的数据是放到不同的段里面的。例如代码段存放的是代码,数据段存放的是数据。全局变量如果没有赋初值进行初始化则是放到未初始化数据段。如果初始化了,则最终生成的hex文件中就要包含初始化数据。这样就会增大hex文件的体积。你可以简单验证一下,全局变量初始化以后,hex文件中代码段的大小是不变的,增加的应该是数据段的大小