【问题标题】:VC++ 'Generating Code', what does it mean?VC++“生成代码”,这是什么意思?
【发布时间】:2010-12-19 04:59:33
【问题描述】:

当在 Visual Studio 中编译时,编译器会自行决定输出:

1>生成代码...

它到底在做什么?

【问题讨论】:

    标签: c++ visual-studio visual-c++


    【解决方案1】:

    Visual Studio 正在调用链接器 LINK.exe,它主要使用目标文件作为输入,以生成可执行文件作为输出,但也能够执行与这些文件和相关文件有关的许多其他工作。 Linker Command-Line Syntax @ MSDN

    【讨论】:

    • 在这种情况下我不这么认为,meds 指的是源代码的编译,而不是链接时间。尽管您是正确的,链接器也可以生成用于实例化模板的代码。
    【解决方案2】:

    编译器一次获得多个输入文件,它一次读取(解析)其中几个文件,然后才为它们生成输出(目标文件),然后再读取更多输入文件。我想这是一种优化,大概是因为对磁盘的混合读/写访问比将它分类为(首先)读访问和(然后)写访问时要慢。

    【讨论】:

    • 我想,无论谁投了反对票,谁知道得更好。愿意开导我吗?
    【解决方案3】:

    模板实例(和其他类型的代码)可能会生成代码(或在某些情况下不会)。

    【讨论】:

    • 是的,但是即使代码中没有模板,VC 也会花时间完成这个阶段。
    【解决方案4】:

    它正在做它所说的:它正在生成机器码。许多编译器将 C/C++ 源代码翻译成一些中间内部表示,然后用作生成实际机器代码的源。 Visual C++ 编译器(与许多其他编译器一样)在批次中执行此操作:首先它将一堆源文件转换为该中间表示,然后将它们全部转换为机器代码(然后开始处理下一批)。当您看到“生成代码”消息时会发生这种情况。

    我不知道它究竟是使用什么逻辑将源文件分成批次。也许它只是按大小工作:一旦到目前为止生成的所有中间表示的总大小达到某个限制,它就会切换到“生成代码”模式。也许那里还有其他一些逻辑在起作用。

    在任何情况下请注意,在这种情况下,非限定术语“代码”并不指源代码,这意味着它与模板和/或预处理器或类似的东西无关。此外,使用不合格的“代码”(而不是合格的“源代码代码”)引用 C 源代码是一件非常小众的事情,与实际程序员相比,营销部门更熟悉。在程序员的层面上,没有人将 C 源代码仅仅称为“代码”:)

    【讨论】:

    • 很好的区别,我开始怀疑我一直在研究的这个新解决方案为什么会发生如此多的代码生成,源代码生成我错误地假设了。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多