c中静态函数的范围

时间:2015-02-24 00:12:27

标签: c stack heap storage-class-specifier

一旦我听说声明为静态的函数不是堆栈,而是放在堆中。现在,当我研究这个时,我发现它非常有趣,但看起来并非如此。这是真的吗?或者有没有办法做到这一点(把功能放在堆上就可以了?)

1 个答案:

答案 0 :(得分:3)

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

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

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

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