我试过在 SO 周围搜索一下,但我找不到这个问题的答案。也许是因为我不能用适当的术语来形容。我想知道的是函数在内存中是如何表示的?指令必须有一些存储要求,我们可以使用函数指针来捕获它们在内存中的位置......有人可以详细说明一下吗?
最一般的概念,具体的实现并不重要。为什么 sizeof 不适用于函数?我对此非常好奇,如果我的概念从一开始就有缺陷(换句话说,如果我以错误的方式思考它),我深表歉意。
我试过在 SO 周围搜索一下,但我找不到这个问题的答案。也许是因为我不能用适当的术语来形容。我想知道的是函数在内存中是如何表示的?指令必须有一些存储要求,我们可以使用函数指针来捕获它们在内存中的位置......有人可以详细说明一下吗?
最一般的概念,具体的实现并不重要。为什么 sizeof 不适用于函数?我对此非常好奇,如果我的概念从一开始就有缺陷(换句话说,如果我以错误的方式思考它),我深表歉意。
这取决于语言。对于编译语言,函数在内存中表示为机器代码;您通常可以从其制造商处获得广泛使用的处理器的文档。
对于C/C++,函数指针可以简单到函数入口点的地址,可以直接用单条指令调用。我相信这对于 C/C++ 实现来说是典型的,但规范并不能保证这一点。一般来说,函数指针的类型决定了函数的调用约定:它期望找到什么参数,以及它如何返回结果。
函数的实际代码大小与调用它无关——sizeof(my_function_pointer)
表示函数指针的大小,而不是函数的大小。请注意,即使是原始函数地址的表示方式也可能与数据指针不同(qv,针对早期Wintel分段架构的编译器,或可能具有完全不同的代码和数据地址空间的嵌入式处理器)。
对于(与 C 不同)函数参数可能引用闭包的语言,这样的“指针”需要包含或引用闭包上下文以及函数的入口点。