28035,已经开了4级优化,有个文件所有的函数都不会被Main函数直接或间接调用到,但是这个文件依然在.ebss段占用空间。为了验证这个问题,我新建一个空项目,把文件直接复制到项目中,保持main函数是空的,用release编译,结果这个文件依然出现在.ebss中。我也知道不是随便写个函数就能占用空间,但是这个函数确实很诡异,我把文件删减到最后剩下这么点代码,还能出现这个现象,编译器bug吗?编译器版本17.9.0,编译后占用5个字节,18.1.4编译后占用1个字节。
#include "DSP2803x_Device.h"
static Uint16 DummyDMXs[1] = {255};
#ifndef DMX_BUNCH
#define DMX_BUNCH(i) DummyDMXs[i-i]
#endif
void LedBunchsMacroScriptRGBW00(int nextFrame)
{
static Uint16 r,g,b,w;
int16 LedBunchsMacroTick;
LedBunchsMacroTick = 0;
DMX_BUNCH(4 * LedBunchsMacroTick ) = r;
DMX_BUNCH(4 * LedBunchsMacroTick + 1) = g;
DMX_BUNCH(4 * LedBunchsMacroTick + 2) = b;
DMX_BUNCH(4 * LedBunchsMacroTick + 3) = w;
}
这个问题很重要,因为我的代码是高度模块化的,代码量极大,但是每次编译都是编译其中某个部分,由于代码太零散,所以不可能到处用预编译语句,我也认为开优化后,没被main函数调用的函数和变量都不会占用空间,所以只在main函数中用预编译排除入口函数,结果发现这个问题。