c - 静态变量的内存映射

标签 c memory-management static

来源:

func_1()
{
    static int i = 10;
    printf("%s : %d\n", __func__, i);
}

func_2()
{
    static int i = 20;
    printf("%s : %d\n", __func__, i);
}

main() {
    static int i = 30;
    func_1();
    func_2();
    printf("%s : %d\n", __func__, i);
}

输出:

func_1 : 10
func_2 : 20
main : 30

编译器如何根据函数区分数据段中的变量?

最佳答案

名称 i 只是每个函数作用域的局部名称,而每个这样的变量都存储在自己的区域中。编译器生成代码,以便从不同的内存地址加载它们中的每一个。

关于c - 静态变量的内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27312050/

相关文章:

c - 有多大的 'int' 可以隐式转换为 'char'?

c - 如何创建一个用完所有分配内存的函数

objective-c - Objective C 中的 C 指针的内存管理如何工作

iphone - 使用 TBXML textFromElement 时发生内存泄漏

C 多线程与 pthread

objective-c - 在 viewDidUnload 和 dealloc 中都释放?

php - 应该存储在 session 中的数据量

django - 在动态网站上为博客使用静态网站生成器?

java - 无法从静态上下文错误中引用非静态方法

c++ - 我可以在不返回 void 的函数中不返回值吗?