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