keil里面data怎么会变大?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil里面data怎么会变大?相关的知识,希望对你有一定的参考价值。

问题是这样的,我手上有一块彩屏的列子程序,我想修改了自己测试。可以是当我删除一些程序,发现data会变大,我删除了越多,data就会越大。有的人告诉我是内存申请了没有释放掉。我想问下,怎么释放内存。

没有删除之前如上图

删除之后data由以前的32变成34.
如果我删除了越多,就会变得越大。
这是怎么回事啊?

这是因为,你删除的程序中,有几行是函数的调用,被你删除后,这些函数就只有函数体,却没有调用了(从编译信息看,是memory_clear_with_font_bgcolor)。当这个函数中有局部变量时,由于没被调用过,所以KEIL无法进行变量的优化,最后只能把局部变量保存下来,反而多占用了空间。
解决办法:1、把不用函数删掉或注释掉
2、写成这样,伪调用:
a = 1;
if(a==0)

memory_clear_with_font_bgcolor();//把从不调用的函数放这里
追问

那您的意思就是说,调用过反而会被keil清除掉,没被调用的反而会被保存下来~

追答

调用过的函数,它里面的局部变量会和其他的变量复用某个地址,而没被调用过的函数,里面的变量KEIL不知道怎么优化,但又必须保留,所以从编译结果来看,反而使用的RAM多了。

参考技术A 这里内存不是动态分配的,应该与申请和释放没有多大关系,具体怎么回事要看编译器如何编译的,可以在仿真的过程看看增加了那些内容。追问

可以给个判别的方法吗

追答

总共就三十几个字节,把全局的变量拉到观察窗口看看就知道了,编译器使用RAM一般是从某个地址起连续使用的。

参考技术B data是什么,恩貌似指的是ram空间吧,传统51也就256Byte。这块区域的话变大变小比如栈空间是编译器决定的,而内存释放啊之类的时动态的。所以data为何变大,应该是编译器的原因。个人意见

pr视频素材为什么会变大。怎么调回来

参考技术A 序列(时间轴)的分辨率比原始视频的分辨率小。可以在时间轴点击素材,然后在效果控件界面(没有看到的话可以在菜单的窗口里面勾选)调整素材大小。

以上是关于keil里面data怎么会变大?的主要内容,如果未能解决你的问题,请参考以下文章

keil c代码空间怎么指定分配,栈检测,常量代码数组指定存放地址?

keil编译成功如何显示

keil怎么在SDRAM里面仿真程序

keil5里面需要添加宏定义么

keil uvision4怎么破解

怎么在keil5里面添加stm32的库,求大神给详细步骤,谢谢