提问人:PKFreeZZy 提问时间:10/3/2023 最后编辑:sepp2kPKFreeZZy 更新时间:10/3/2023 访问量:30
C 编译器通常会优化初始化的全局数据吗?
Do C compilers generally optimize out initialized global data?
问:
我正在为 Nintendo 64 反编译 Super Smash Bros.。它于 1999 年发布,使用效率相当低的编译器 (IDO 7.1) 构建,缺少某些功能。我的目标是使代码尽可能灵活,开箱即用。
我必须克服的一个障碍是初始化一个数组,该数组需要包含具有不同位域的脚本的各种命令;这些是按顺序解析的,并且它们都需要存在。如果不是因为 IDO 不支持指定的初始值设定项,联合可以在这里工作;只能设置联盟的第一个成员。
我的下一个最佳选择是逐个初始化命令,但问题是只会引用脚本中的第一个命令。一般来说,编译器是否倾向于丢弃“未使用”的初始化数据?IDO 很可能不会,但我想知道是否有必要进行任何体操来保留未引用的数据。
如果所有其他方法都失败了,我必须将其设置为无符号整数数组,并以二进制格式将所有内容塞入其中,并使用宏进行位移。
// ColAnim Script 0 is NULL
// 0x8012CA90 - ColAnim Script 1 (only Col1_Ev0 referenced)
caColorEventSetRGBA caColorEvents_Col1_Ev0 = { caColorEvent_Kind_SetColor1, 0xFF, 0xFF, 0xFF, 0x30 };
caColorEventDefault caColorEvents_Col1_Ev1 = { caColorEvent_Kind_Wait, 65535 };
caColorEventGoto caColorEvents_Col1_Ev2 = { caColorEvent_Kind_Goto, &caColorEvents_Col1_Ev0 };
// 0x8012CAA4 - ColAnim Script 2 (only Col2_Ev0 referenced)
caColorEventDefault caColorEvents_Col2_Ev0 = { caColorEvent_Kind_ToggleColorOff };
caColorEventDefault caColorEvents_Col2_Ev1 = { caColorEvent_Kind_End };
// 0x8012CAAC - ColAnim Script 3 (only Col3_Ev0 referenced)
caColorEventSetRGBA caColorEvents_Col3_Ev0 = { caColorEvent_Kind_SetColor1, 0xFF, 0xFF, 0xFF, 0x82 };
caColorEventBlendRGBA caColorEvents_Col3_Ev1 = { caColorEvent_Kind_BlendColor1, 3, 0xFF, 0xFF, 0xFF, 0x32 };
caColorEventDefault caColorEvents_Col3_Ev2 = { caColorEvent_Kind_Wait, 3 };
caColorEventDefault caColorEvents_Col3_Ev3 = { caColorEvent_Kind_ToggleColorOff };
caColorEventDefault caColorEvents_Col3_Ev4 = { caColorEvent_Kind_Wait, 1 };
caColorEventGoto caColorEvents_Col3_Ev5 = { caColorEvent_Kind_Goto, &caColorEvents_Col3_Ev0 };
答: 暂无答案
评论