代码之家  ›  专栏  ›  技术社区  ›  Dennis Vash

什么是语义内存泄漏?

  •  0
  • Dennis Vash  · 技术社区  · 7 年前

    我明白 内存泄漏 但找不到任何有关 语义的 语义记忆泄漏 不同之处在于 memory leak .

    例如 内存泄漏 :

    #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. */
    }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Ady    7 年前

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

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

        2
  •  0
  •   Dennis Vash    7 年前

    定义 (语义垃圾)

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

    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:编程语言课程

    (演讲) 第5章 存储 五点五 自动内存管理-语义内存泄漏

    推荐文章