C和内联函数中的独立目标代码

问题描述 投票:0回答:1

当我遇到这条线时,我正在从inline中了解Inline Functions In C函数:

有时,即使编译器是内联函数,编译器也有必要为其发出目标代码的独立副本-例如,如果有必要获取该函数的地址,或者如果可以,不能在某些特定上下文中内联,或者(也许)在优化已关闭的情况下。 (当然,如果您使用的是无法理解内联的编译器,则将需要目标代码的独立副本,以便所有调用实际上都可以正常工作。)

我对它要说的东西一无所知,有人可以特别解释一下什么是独立目标代码吗?

c c11
1个回答
0
投票

您知道,“内联”功能被翻译为“就在那儿”的机器指令。每次出现对该功能的新“调用”时,都会在每个不同的位置逐字重复这些指令-实际上并未“调用”该功能。 (内联函数非常类似于汇编器“宏”。)

但是,如果您要(说)该函数的地址,则编译器必须生成该函数的非内联副本,以便能够为您提供one“的位置。 “


0
投票

““目标代码”通常是指编译器的输出,移交给链接器,作为生成机器代码之前的中间步骤。

文字说的是,如果由于某种原因而使用了函数的地址,例如使用指向该函数的函数指针,则该函数将无法被内联。因为内联函数没有可通过函数指针调用的地址。内联函数只是与调用代码链接在一起,而实际上并未进行任何函数调用。

© www.soinside.com 2019 - 2024. All rights reserved.