什么是语义内存泄漏?
What is Semantical Memory Leak?
我理解内存泄漏的定义,但找不到任何与语义或语义内存相关的内容Leak 和 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. */
}
定义(语义垃圾)
程序永远不会再使用的变量,但是
仍然保留对它的引用,称为语义垃圾。
换句话说,想象一下在您的主程序中分配一个数组并仅在前几行中使用它,并且在您完成后不释放它。基本上语义内存泄漏和内存泄漏之间的主要区别在于,在内存泄漏中你没有引用未释放的数组,但是在语义泄漏中你实际上有一个引用它虽然你不再使用它。
定义(语义垃圾)
程序永远不会再使用的变量,但是
仍然保留对它的引用,称为语义垃圾。
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 算法都无法对抗语义垃圾。
Reference:
Technion CS 234319: Programming Languages Course
(Lecture) Chapter 5 Storage 5.5 Automatic memory management - Semantical memory leak
我理解内存泄漏的定义,但找不到任何与语义或语义内存相关的内容Leak 和 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. */
}
定义(语义垃圾) 程序永远不会再使用的变量,但是 仍然保留对它的引用,称为语义垃圾。
换句话说,想象一下在您的主程序中分配一个数组并仅在前几行中使用它,并且在您完成后不释放它。基本上语义内存泄漏和内存泄漏之间的主要区别在于,在内存泄漏中你没有引用未释放的数组,但是在语义泄漏中你实际上有一个引用它虽然你不再使用它。
定义(语义垃圾)
程序永远不会再使用的变量,但是 仍然保留对它的引用,称为语义垃圾。
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 算法都无法对抗语义垃圾。
Reference: Technion CS 234319: Programming Languages Course
(Lecture) Chapter 5 Storage 5.5 Automatic memory management - Semantical memory leak