我正在调查Linux内核(特别是负载平衡区域)。 在内核(sched.h)中有一个struct的声明:
struct sched_group
看起来像这样:
struct sched_group {
struct sched_group *next; /* Must be a circular list */
atomic_t ref;
unsigned int group_weight;
struct sched_group_power *sgp;
/*
* The CPUs this group covers.
*
* NOTE: this field is variable length. (Allocated dynamically
* by attaching extra space to the end of the structure,
* depending on how many CPUs the kernel has booted up with)
*/
unsigned long cpumask[0];
};
我不明白的是使用大小为0的cpumask数组。 任何解释都将非常感激:)
答案 0 :(得分:3)
cpumask的大小应该基于具有不同CPU数量的不同平台而变化,这就是它无法定义固定长度数组的原因。 GNU C支持a variable-length object,它应该是结构的最后一个元素。