【问题标题】:Can assigning many basic data types cause memory leakage, and can you avoid it?分配许多基本数据类型会导致内存泄漏,你能避免吗?
【发布时间】:2018-03-28 08:27:03
【问题描述】:

假设我有一个这样的程序:

int main(void) {
    while(1) {
        int some_int = rand(); //Some randomly generated integer
        printf("%d\n", some_int);
    }
    return 1;
}

程序在无限循环中旋转,在每次迭代中声明some_int。我知道,如果您分配一些内存,您应该在稍后阶段释放它以避免程序中的内存泄漏,并且据我所知,C 中没有垃圾收集器来释放未使用变量的内存。这是否意味着我当前的实现会导致内存泄漏,因为我声明了一个只使用一次的新整数?有没有办法“释放”它使用的内存?

您当然可以将变量声明移到无限循环之外,但这只是理论上的情况。

【问题讨论】:

    标签: c memory-management memory-leaks


    【解决方案1】:

    局部变量具有自动存储持续时间。这意味着编译器将自动选择存储它的最佳位置,并在变量超出} 的范围时自动清理。实际上,CPU 可能会将变量存储在 CPU 寄存器中。所以你的代码没问题。

    您需要free 的唯一时间是当您使用分配的存储时,通过显式调用 malloc/calloc/realloc。像 Java 这样的带有垃圾收集的语言在任何地方都使用隐式堆分配。 C 不这样做,这也是 C 在设计上比 Java 快得多的众多原因之一。

    【讨论】:

    • (Java 中的 Nitpick,只有 java.lang.Object 类型和基元数组或 java.lang.Objects 可调度用于垃圾回收:即使用 new 创建的任何内容。但无论如何 +1。)
    • 我宁愿说“Java 在设计上比 C 慢”,而不是反过来,通过查看它们的相对年龄;)
    猜你喜欢
    • 2020-04-06
    • 2012-08-10
    • 2019-08-12
    • 2021-03-23
    • 2021-09-25
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多