[函数指针存储在程序的哪个段中?

问题描述 投票:0回答:3

我想知道函数指针存储在程序的哪个部分?就像是在程序堆栈中还是在同一部分有单独的部分?

void f(void){}
int main(void){
 int x[10];
 void (*fp)(void) = NULL;
 fp = f;
 return 0;
}

现在,x和fp的地址是否在程序的堆栈存储器的同一段中?

c function function-pointers
3个回答
5
投票

函数指针在存储方面与任何其他指针没有什么不同,同样也与任何其他变量没有什么不同。因此,是的,它们都将一起存储在同一位置,这是局部变量的堆栈。


1
投票

有了一个好的编译器,它们将不会存在于任何地方,因为它们的值从未被使用过,并且对程序输出没有任何贡献。


0
投票

这个精确问题的答案是,您的两个示例(一个int数组和一个指向函数的指针)都是局部变量,并且都保存在“堆栈”中(堆栈有点概念,但是位于问题的级别,这是思考问题的正确方法),因此xfp的地址都在这里。

然而,您可能会得到什么(带有“存储程序的哪个部分的函数指针”)也许有点不同:如果您为函数指针分配了一个值,例如您为它分配一个实际函数的地址-包含该函数的地址几乎肯定会在其他地方,因为可执行代码与执行堆栈位于系统内存的不同部分。

(整数数组完全在堆栈上分配,如果将x视为指针,它将指向堆栈区域。)

© www.soinside.com 2019 - 2024. All rights reserved.