gpt4 book ai didi

c++ - 调查 visual studio 程序集输出

转载 作者:行者123 更新时间:2023-11-30 02:39:58 28 4
gpt4 key购买 nike

在使用/FA 选项编译使用此虚拟类的代码时

class A  {
public:
A() {}
int Initialize() {
return 0;
}
};

我查看了生成的 asm 文件,其中定义并使用了它,并在 asm 文件中看到了这一点

PUBLIC  ?Initialize@A@@QEAAHXZ              ; A::Initialize
PUBLIC ??0A@@QEAA@H@Z ; A::A

??0A@@QEAA@H@Z PROC ; A::A, COMDAT
; File d:\dev\temp\consoleapplication1\consoleapplication1\consoleapp2.cpp
; Line 7
mov rax, rcx
ret 0
??0A@@QEAA@H@Z ENDP ; A::A
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?Initialize@A@@QEAAHXZ
_TEXT SEGMENT
this$dead$ = 8
?Initialize@A@@QEAAHXZ PROC ; A::Initialize, COMDAT
; File d:\dev\temp\consoleapplication1\consoleapplication1\consoleapp2.cpp
; Line 9
xor eax, eax
; Line 10
ret 0
?Initialize@A@@QEAAHXZ ENDP ; A::Initialize

如您所见,为构造函数和 Initialize 函数生成了“简单”的实现函数。

起初我以为这个非内联实现将用于使用类 A 的地方,但调试显示情况并非如此(代码似乎是内联的)。除此 asm 文件外,A 类未在其他任何地方使用,那么如果不使用,为什么会生成这些函数?

整个程序优化到位。

最佳答案

"so why are those functions generated if not used ?"

您正在检查为单个翻译单元生成的汇编代码,而不是链接后的最终汇编。

链接器最终会删除所有未使用的函数。

关于c++ - 调查 visual studio 程序集输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326886/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com