0

一旦我听说声明为静态的函数不是放在堆栈中,而是放在堆中。现在,当我研究这个时,我发现这很有趣,但看起来不是真的。那么这是真的吗?或者有什么方法可以做到这一点(把函数放在堆上)?

4

1 回答 1

3

函数不放在堆栈或堆上。函数(即实现它的代码)通常放置在内存的某个区域中,通常由操作系统标记为只读,在程序启动时从可执行文件中加载。

函数定义中的static关键字会影响其名称的可见性。函数的static名称仅在定义它的翻译单元中可见。如果您使用指针而不是通过其名称调用函数,它仍然可以从其他翻译单元(源文件)调用。

如果函数中定义的变量未定义为 ,则它们的存储通常分配在“堆栈”上,如果定义为static,则通常分配在某个全局内存区域中static。“堆”仅用于由malloc类似函数分配的内存。

请注意,C 标准不使用术语“堆栈”或“堆”,不同的 C 编译器可能会以不同的方式使用它们。函数中的局部变量以类似堆栈的方式分配,但标准没有说明“堆栈”是如何实现的(例如,它在内存中不一定是连续的)。

于 2015-02-24T00:18:17.633 回答