【问题标题】:in which segment of the program are function pointers stored?函数指针存储在程序的哪个段中?
【发布时间】:2010-09-17 00:58:21
【问题描述】:

我想知道函数指针存储在程序的哪个部分?如,它是在程序堆栈上还是有一个单独的部分?

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

现在,x 和 fp 的地址会在程序堆栈内存的同一段吗?

【问题讨论】:

    标签: c function function-pointers


    【解决方案1】:

    函数指针在存储方面与任何其他指针没有什么不同,这与任何其他变量也没有什么不同。所以是的,它们都将一起存储在同一个地方,即局部变量的堆栈。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这个精确问题的答案是,您的两个示例(一个整数数组和一个指向函数的指针)都是局部变量,并且都保存在“堆栈”中(堆栈有点概念但在你问题的层面上,这是正确的思考方式),所以xfp的地址都在那里。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-13
          • 1970-01-01
          相关资源
          最近更新 更多