【问题标题】:What is Semantical Memory Leak?什么是语义内存泄漏?
【发布时间】:2018-06-18 15:49:26
【问题描述】:

我了解 内存泄漏 的定义,但找不到与 语义语义内存泄漏 相关的任何内容以及与 @ 的区别987654321@.

内存泄漏示例

#include <stdlib.h>

void function_which_allocates(void) {
    /* allocate an array of 45 floats */
    float *a = malloc(sizeof(float) * 45);

    /* additional code making use of 'a' */

    /* return to main, having forgotten to free the memory we malloc'd */
}
int main(void) {
    function_which_allocates();

    /* the pointer 'a' no longer exists, and therefore cannot be freed,
     but the memory is still allocated. a leak has occurred. */
}

【问题讨论】:

  • 你在哪里发现语义内存泄漏?有参考吗?

标签: memory memory-leaks storage heap-memory definition


【解决方案1】:

定义(语义垃圾) 程序永远不会再使用的变量,但是 仍然保留对它的引用,称为语义垃圾。

换句话说,想象一下在你的主程序中分配一个数组并只在前几行使用它,并且在你没有释放它之后。基本上,语义内存泄漏和内存泄漏之间的主要区别在于,在内存泄漏中,您没有对未释放数组的引用,但是在语义泄漏中,尽管您不再使用它,但实际上您有对它的引用。

【讨论】:

    【解决方案2】:

    定义 (语义垃圾)

    程序永远不会再使用的变量,但是 仍然保留对它的引用,称为语义垃圾。

    class Huge {
        Huge() { // Constructor:
                 // Allocates lots of data and stores
                 // it in the newly created object
        }
    }
    
    void f() {
        Huge semanticGarbage = new Huge();
        heavy.computation(new Indeed(100));
        System.exit(1);
    }
    

    所有复杂的 GC 算法都徒劳地与语义垃圾作斗争。

    参考: Technion CS 234319:编程语言课程

    (Lecture) 第 5 章 存储 5.5 自动内存管理 - 语义内存泄漏

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 2016-08-03
      • 2013-03-23
      • 2018-09-09
      • 2023-04-03
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多