gpt4 book ai didi

language-agnostic - 一般 - 函数在内存中是如何表示的?

转载 作者:行者123 更新时间:2023-12-04 05:48:48 25 4
gpt4 key购买 nike

我试过在 SO 周围搜索一下,但我找不到这个问题的答案。也许是因为我不能用适当的术语来表达。我想知道的是函数在内存中是如何表示的?指令必须有一些存储要求,我们可以使用函数指针来捕获它们在内存中的位置......有人可以详细说明一下吗?

最一般的概念,具体的实现并不重要。为什么 sizeof 不适用于函数?我真的对此很好奇,如果我的想法从一开始就有缺陷(换句话说,如果我以错误的方式思考),我深表歉意。

最佳答案

这取决于语言。对于编译语言,函数在内存中表示为机器码;一般可以拿到documentation for widely used processors来自他们的制造商。

对于C/C++,函数指针可以像函数入口点的地址一样简单,可以通过单条指令直接调用。我相信这对于 C/C++ 实现来说是典型的,但规范并不能保证这一点。通常,函数指针的类型决定了函数的调用约定:它期望找到什么参数,以及它如何返回其结果。

函数的实际代码大小与调用它无关--sizeof(my_function_pointer)指示函数指针的大小,而不是函数。请注意,即使是原始函数地址也可能与数据指针不同(q.v.,针对早期 Wintel 分段体系结构的编译器,或可能具有完全不同的代码和数据地址空间的嵌入式处理器)。

对于(与 C 不同)函数参数可能引用闭包的语言,这样的“指针”需要包含或引用闭包上下文以及函数的入口点。

关于language-agnostic - 一般 - 函数在内存中是如何表示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340391/

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