何为内存泄漏

内存泄漏这词哥学c语言也听的多了,当时半懂半不懂,现在终于知道是啥回事了,

下面的内容节选于《linux设备驱动》中文第三版一书。。

if (!dptr->data[s_pos]) {
dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL);
if (!dptr->data[s_pos])
goto out;
}

假设有 2 个进程( 我们会称它们为"A"和"B" ) 独立地试图写入同一个 schull 设备的相
同偏移. 每个进程同时到达上面片段的第一行的 if 测试. 如果被测试的指针是 NULL,
每个进程都会决定分配内存, 并且每个都会复制结果指针给 dptr->datat[s_pos]. 因为
2 个进程都在赋值给同一个位置, 显然只有一个赋值可以成功.
当然, 发生的是第 2 个完成赋值的进程将"胜出". 如果进程 A 先赋值, 它的赋值将被进
程 B 覆盖. 在此, scull 将完全忘记 A 分配的内存; 它只有指向 B 的内存的指针. A
所分配的指针, 因此, 将被丢掉并且不再返回给系统

因此进程A分配的内存就被丢失,造成了内存泄漏,内存泄漏的意思即是如此

posted @ 2012-09-27 10:26  一维  阅读(222)  评论(0编辑  收藏  举报