汇编器是否支持类C/C++预编译头功能以优化大包含文件汇编速度?
问题背景
将包含50个汇编文件的大型MASM项目拆分为独立翻译单元后,汇编时间从1分钟暴涨至10分钟。经排查,耗时激增的核心原因是一个包含60000个常量的头文件WindowsLinux.inc——该文件通过解析Windows/Linux的C头文件常量并转换为MASM语法生成。
示例:WindowsLinux.inc
ERROR_SUCCESS EQU 0 ERROR_INVALID_FUNCTION EQU 1 ERROR_FILE_NOT_FOUND EQU 2 ERROR_PATH_NOT_FOUND EQU 3 ERROR_TOO_MANY_OPEN_FILES EQU 4 ERROR_ACCESS_DENIED EQU 5 ...
耗时验证测试
为确认该头文件的影响,编写了测试程序slow.asm,仅用于获取常量ERROR_SUCCESS的值:
测试代码:slow.asm
option casemap:none extrn printf:proc IFDEF SLOW include WindowsLinux.inc ELSE ERROR_SUCCESS EQU 0 ENDIF .data szError db 'ERROR_SUCCESS = %d',0ah,0 .code main proc mov rdx,ERROR_SUCCESS mov rcx,offset szError call printf ret main endp end
测试结果
引入大常量头文件时:
执行命令:@ECHO %TIME% ml64.exe /DSLOW /c slow.asm @ECHO %TIME%输出:
9:15:52.17
C:\masm32>ml64.exe /DSLOW /c slow.asm
Microsoft (R) Macro Assembler (x64) Version 14.29.30146.0
Copyright (C) Microsoft Corporation. All rights reserved.Assembling: slow.asm
9:15:59.43
耗时约8秒。直接定义常量时:
执行命令:@ECHO %TIME% ml64.exe /c slow.asm @ECHO %TIME%输出:
9:35:55.12
C:\masm32>ml64.exe /c slow.asm
Microsoft (R) Macro Assembler (x64) Version 14.29.30146.0
Copyright (C) Microsoft Corporation. All rights reserved.Assembling: slow.asm
9:35:55.15
耗时仅约3毫秒。
当前临时方案及疑问
目前我们通过将常量数量从60000削减至250来缩短汇编时间,但每次新增常量都需要频繁更新头文件,操作繁琐。
请问是否存在支持类似C/C++预编译头功能的汇编器,能够显著缩短这类场景下的汇编时间?
内容的提问来源于stack exchange,提问作者vengy

