常规 - 函数在内存中的表示方式



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

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

这取决于语言。 对于编译语言,函数在内存中表示为机器码;您通常可以从其制造商处获得广泛使用的处理器的文档。

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

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

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

最新更新