cpumask数组,大小为0

时间:2015-12-02 04:41:56

标签: c linux linux-kernel

我正在调查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数组。 任何解释都将非常感激:)

1 个答案:

答案 0 :(得分:3)

cpumask的大小应该基于具有不同CPU数量的不同平台而变化,这就是它无法定义固定长度数组的原因。 GNU C支持a variable-length object,它应该是结构的最后一个元素。