《C专家编程》读书笔记

/*3.6节*/
typedef 与宏主要有两点区别:
(1)可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做。如:
#define peach int
unsigned peach i;//没问题
typedef int peach;
unsigned peach i;//错误
(2)在连续的几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如:
#define int_ptr int *
int_ptr chalk, cheese;//结果是chalk是int *型,而cheese是int型。
typedef int * int_ptr;
int_ptr chalk, cheese;//都是int *型。
/*post at 2010-06-16*/
==================

 

/*4.3节*/
访问数组和指针的区别
访问数组时,对数组的下标引用:
char a[9] = “abcdefgh”;
c = a[i];

访问指针时,对指针的下标引用:
char *p = “abcdefgh”;
c = p[i];

《C专家编程》读书笔记_第1张图片

 

/*7.3节*/
一、虚拟内存
基本思路是用廉价但缓慢的磁盘来扩充快速却昂贵的内存。
在任一给定时刻,程序实际需要使用的虚拟内存区段的内容被载入到物理内存中;当物理内存中的数据有一段时间未被使用,它们就可能被转移到硬盘中,节省下来的物理内存空间用于载入需要使用的其他数据。
虚拟内存通过“页”的形式组织。页就是操作系统在磁盘和内存之间移来移去或进行保护的单位,一般为几K字节。
只有用户进程才能被换进换出。
换出:如果该进程不会马上运行,操作系统可以暂时取回所有分配给它的物理内存资源,将该进程的所有相关信息都备份到磁盘上。这样,这个进程就被“换出”,在磁盘中有一个特殊的“交换区”,用于保存从内存中换出的进程。交换区的大小一般是物理内存的几倍。
换入:进程只能操作位于物理内存中的页面。当进程引用一个不再物理内存中的页面时,MMU就会产生一个页错误。内核判断该引用是否有效。如果无效,内核向进程发送一个“段违规”信号;如果有效,内核从磁盘取回该页,换入到内存。
二、Cache存储器
Cache的特点是容量小、价格高、速度快。Cache位于CPU和内存之间,是一种几块的存储缓冲区。
当处理器需要从一个特定的地址提取数据时,这个请求首先递交给Cache。如果数据已经存在于Cache中,它就可以立即被提取;否则,Cache向内存传递这个请求,进行较缓慢的访问内存操作。内存读取的数据以行为单位,在读取的同时也装入到Cache中。
三、内存泄露
判断内存泄露的方法
首先,查看可用的交换区是否在减少;
其次,通过ps aux,查看vsz列,此列为页面表示的进程的大小。
/*post at 2010-07-05*/
======================

你可能感兴趣的:(《C专家编程》读书笔记)