月度归档:2015年06月

虚拟存储器之–垃圾收集

摘自 《深入理解计算机系统》 虚拟存储器

垃圾收集器的由来:

在类似于malloc包这样的显示分配器中,通常是通过malloc 和free来分配和释放堆块,应用程序需要解释所有不再需要使用的已分配块。
未能释放已分配的块是一种常见的存储器错误,如下所示,分配一块临时存储器:
void g(){
int *p =(int *)malloc(1000);
return ;
}
当程序不需要使用p,程序返回前应该释放p,如何在进程中未释放p,或者忘记释放p,则会导致整个应用的生命周期中此内存都会处于已分配状态,会占用目前可使用的堆空间.
垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块定义为垃圾,自动回收垃圾的机制我们称之为垃圾回收机制。在一个支持垃圾收集的系统中,应用显式分配堆块,但是可不显式的释放块,垃圾回收机制在c# java Perl语言中均存在此机制,在c语言中,存在一种Mark&Sweep(标记&清除算法),这个算法可以对C和C++提供垃圾回收机制。



垃圾收集器基本要素:

通常垃圾收集器模块的设计是通过两个数组:
一组 存储已分配根节点信息
一组 存储所有的堆空间
当通过存储已分配根节点信息 映射堆空间(一个复杂的结构体树)时,无法进行关联到的堆块时,这个堆块就视为垃圾,可以进行释放,可以进行再分配。

相关阅读:
常见的虚拟存储器错误
malloc free函数的用法
malloc的使用方法及注意事项
为什么要使用动态存储器分配(malloc)

linux 命令之find


一、find命令简介

find命令的作用主要是查找文件,可以到指定的目录中查找指定的文件。默认情况下find命令是查找当前目录下的文件,可以通过参数设置查找整个系统的文件。


二、find命令参数说明


按文件名查找

-name 根据文件名查找

根据文件属性:

-user 用户名
-group 组名

根据文件大小查找:

-size [+/-] [单位]
+ 大于
– 小于
单位: b 数据块 c 字节 w 双字节 k=kb M=Mb G =GB

-size +5M 大于5M
-size -5M 小于5M
-size 4M 5M 在4M和5M之间
-empty 大小为0的文件

根据文件类型查找:

-type 文件类型
类型列表:
-f 普通文件
-d 目录
-b 块设备
-c 字符设备
-p 命名管道
-l 链接
-s socket文件


三、find命令使用说明

[root@localhost ~]#find ‘so.c’ //查找当前名录下文件名为 so.c的文件
[root@localhost ~]#find ! -name ‘so.c’ //查找当前目录下文件不等于 so.c的全部文件
[root@localhost ~]#find -name ‘so.c’ -o -name ‘t2.c’ //获取当前目录下文件名 等于 so.c 或 t2.c的文件
[root@localhost ~]#find -name ‘so.c’ -a -name ‘*.c’ //获取当前目录下的文件名 等于 so.c 并且 后缀名.c的文件
[root@localhost ~]#find -size 10M 50M 获取文件大小在 10M和50M之间的文件
[root@localhost ~]#find -size +10M 获取大于10M的文件
[root@localhost ~]#find -size -10M 获取小于10M的文件
[root@localhost ~]#find -empty 获取文件大小为0的文件
[root@localhost ~]#find -type d //获取当前目录下的 目录文件