Watcom C 2.0开启最高优化后编译简单代码生成未优化汇编的疑问
问题核心原因
你编译参数中的-d2是导致优化失效的首要因素。
Watcom C的-d2参数用于生成完整的源代码级调试信息,开启该参数时编译器会强制禁用绝大多数优化逻辑:
- 必须保留所有局部变量的栈存储空间,无法将返回值直接存入AX寄存器省略栈写入步骤
- 必须保留C代码每行对应的执行边界,不会合并跳转逻辑、消除冗余跳转,避免打断点、单步调试时行号对应错乱
解决方法
直接从编译指令中删除-d2参数即可,修改后的编译指令如下:
wcc test.c -i="C:\Data\Projects\WATCOM/h" -otexan -bt=dos -fo=.obj -mc
如果删除-d2后仍然存在少量冗余逻辑,可以额外添加-s参数关闭栈溢出检查,进一步放开优化限制。Watcom C 2.0作为1990年代初期的编译器,对8086平台的极限优化能力确实存在一定上限,但删除调试参数后生成的汇编会和你预期的优化结果基本一致。
内容的提问来源于stack exchange,提问作者Roman Hocke
相关产品推荐
相关产品推荐

