background image

了调入要存取的一页,必须调出另一页,而这将导致更多的页错动作,因为
此时不同的一页已被移到磁盘上。在短时间内出现大量页错动作的情形被称为
页抖动,它将大大降低系统的执行效率。
    频繁存取内存中大量散布的位置的程序更容易在系统中造成页抖动。如果同
时运行许多小程序,而实际上已经不再使用这些程序,也很容易造成页抖动。
为了减少页抖动,你应该减少同时运行的程序的数目。对于大的程序,你应该
改变它的工作方式,以尽量使操作系统能准确地判断出哪些页不再需要。为此,
你可以使用高速缓冲存储技术,或者改变用于大型数据结构的查找算法,或
者使用效率更高的 malloc()函数。当然,你也可以考虑增加系统的 RAM,以
减少页出动作。

    

2.4 什么是 const 指针?

    如果希望一个变量在被初始化后其值不会被修改,程序员就会通过 const

——

修饰符和编译程序达成默契。编译程序会努力去保证这种默契

它将禁止程

序中出现对说明为 const 的变量进行修改的代码。
    const 指针的准确提法应该是指向 const 数据的指针,即它所指向的数据
不能被修改。只要在指针说明的开头加入 const 修饰符,就可说明一个 cosnt
指针。尽管 const 指针所指向的数据不能被修改,但 cosnt 指针本身是可以修
改的。下面给出了 const 指针的一些合法和非法的用法例子:
    const char *str="hello";
    char c=*str;  /*legal*/
    str++;       /*legal*/
    *str='a';     /* illegal */
    str[1]='b';  /*illegal*/
    前两条语句是合法的,因为它们没有修改 str 所指向的数据;后两条语句
是非法的,因为它们要修改 str 所指向的数据。
    在说明函数参数时,常常要使用 const 指针。例如,一个计算字符串长度的
函数不必改变字符串内容,它可以写成这样:
    my_strlen(const char *str)
    {
        int count=0;
        while ( * str++)
        {
            count ++;
        }
        return   count;
    }

   注意,如果有必要,一个非 const 指针可以被隐式地转换为 const 指针,
但一个 const 指针不能被转换成非 const 指针。这就是说,在调用
my_strlen()时,它的参数既可以是一个 const 指针,也可以是一个非 const
指针。