从我在网上看到的struct.h
来看,cpu_set_t
是一个包含位掩码的结构体,其中每个位代表一个线程/进程可以使用的CPU。
它是这样定义的:
typedef struct
{ __CPU_BITTYPE __bits[ CPU_SETSIZE / __CPU_BITS ];
} cpu_set_t
__CPU_BITTYPE
为unsigned long int
。
上面的cpu_set_t
定义不意味着结构体包含一个大小为CPU_SETSIZE / __CPU_BITS
的名为__bits
的数组吗?我遗漏了什么?它如何被解释为位场?
是的,它是一个数组。这是考虑到cpu数可能多于整数位数的可能性。
CPU_SETSIZE
是CPU集中的CPU总数,__CPU_BITS
是每个整数用来保存位掩码的位数。要访问特定CPU的位,您可以将CPU编号除以__CPU_BITS
以获得数组索引,并使用模数作为左移来获得整数中的该位。几乎肯定有一个宏可以执行这个操作。
当不能将整数类型的元素数量限制在以位为单位的大小时,这通常是C语言中位数组的实现方式。