最近在无奈的阅读Linux Kernel Code. 无奈自己的编程基础太差,Linux的代码写的又实在是太神奇,只好一行一行的慢慢啃,顺带在博客上记录自己任何一点的小心得以备之后查阅。


Linux中大部分的Enum都是没有枚举名字的,而且通常在一串类型之后会带上一个NR啥啥的代表某number的量,起初这让我这个对于每个细节都必须弄懂的强迫症小孩来说感到无比困扰。后来偶终于发现,这些名字的实际功能只是一种类似Macro的定义,是用来给某类型集合进行Index的,而最后的那个NR变量只是一个用来记录这个集合中的类型的数量的值,只是由于Enum的特性放在这里正好可以实现这种功能。这里有个例子是在struct page中的:

enum {
        MM_FILEPAGES,
        MM_ANONPAGES,
        MM_SWAPENTS,
        NR_MM_COUNTERS
};

这个Enum表示所有的page有可能属于前三种类型中的某一种,而他们的index分别为0,1,2。而最后的NR_MM_COUNTERS在此处的值为3(Enum内枚举类型的值从0开始逐一递增),表示总共有3种page类型。这个值可以在之后用来作为一些循环界值等等。