内联汇编的核心好处,就这几条,非常实用:
- 能直接用 C 里没有的 CPU 指令
比如读取时间戳、CPU 信息、特权指令、原子操作等,C 语言本身写不出来,必须用汇编。
- 极致性能优化
- 避开编译器生成的冗余指令
- 手工安排寄存器、减少内存访问
- 加密、视频编解码、数字信号处理常用
- 直接操作寄存器 & 硬件
- 嵌入式、驱动、内核里读写控制寄存器
- 精确控制每一步执行,不依赖编译器优化
- 不用单独编译汇编文件
普通汇编要写 .s 文件、单独汇编、再链接。
内联汇编直接写在 C 里,一行搞定,方便很多。
- 可以直接读写 C 变量
不用复杂传参,汇编里直接用 C 的变量,交互非常方便。
对比一下你关心的两种
- MSVC 内联汇编:写法简单,但x64 不能用
- GNU 内联汇编:写法稍复杂,但x86/x64/Linux/Windows 全能