gpt4 book ai didi

c - 内部标识符(例如自动/局部变量和标签)是否由链接器链接?

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:53 25 4
gpt4 key购买 nike

Are internal identifiers (such as auto, local variables and labels) linked by linker?

(据我目前所知,他们不是。我想问“我是对的吗?”)

还有一件事:
- “所有具有非文件范围的内容都不会被链接器链接”这样说是否正确?

最佳答案

通常自动/局部变量位于寄存器或堆栈中,因此不需要任何链接。然而可以想象,在一些堆栈有限的架构上,非递归(直接或间接)函数的自动/局部变量被从函数中取出并放置在全局内存中。当然,该函数也将不再是可重入的。在这种情况下,将为该本地生成一个符号,该符号将由链接器解析。同样考虑以下示例:

int f(void)
{
static int v = 0;
return v++;
}

虽然 v 的范围被限制在函数 f 中,但它仍然会导致全局符号(很可能)被链接器解析。我说“最有可能”,因为编译器也可能将 static 全局变量组合在一起,并通过指向组基址的指针加上偏移量来引用它们。从而避免过于频繁地加载符号地址。

您的陈述大致成立,但也有异常(exception),它可能取决于编译器和架构。

标签通常由链接器处理,即使它们没有导出链接也是如此。

编辑:考虑到 Jonathan 的观察,您可能指的是标识符的实际名称,那么通常只有具有外部链接的符号才会按字面意思传递给链接器。所有用于标签和静态全局变量的内部标识符都将重命名为一些编号符号。尽管如此,链接器仍可用于解析此类编号符号。请注意,通常静态函数仍会保留其名称,即使它们没有外部链接也是如此。

关于c - 内部标识符(例如自动/局部变量和标签)是否由链接器链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290680/

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