[LITMUS^RT] A little confused on struct subtask subtasks[0]

Glenn Elliott gelliott at cs.unc.edu
Mon Feb 20 23:46:41 CET 2012


Hi Hang Su,

Zero-length arrays at the end of a struct is a trick that you'll see in C from time to time.  Memory for the "struct pfair_param" instance is allocated dynamically with kmalloc.  When this allocation is made, more than sizeof(struct pfair_param) memory is allocated.  Thus, the subtasks array can be indexed past sizeof(struct pfair_param).

In sched_pfair.c, find the line "param = kmallock(…)"  Observe that extra memory is allocated with "quanta * sizeof(struct subtask)".  This allocates space for the subtask array.

Here's more information on this technique: http://stackoverflow.com/questions/295027/array-of-zero-length

-Glenn


On Feb 20, 2012, at 4:14 PM, Hang Su wrote:

> Hi all:
> 
> I am reading source code about P-fair scheduling algorithm under /litmus/sched_pfair.c. struct subtask subtasks[0] is declared in struct pfair_param. From definition of function dump_subtasks(struct task_struct*t), subtasks is like a pointer to struct subtask or the name of a struct subtask array. But why it is declared as a struct subtask array with zero element ? is it as the same meaning as a pointer to struct subtask ? 
> 
> 
> Thanks.
> _______________________________________________
> litmus-dev mailing list
> litmus-dev at lists.litmus-rt.org
> https://lists.litmus-rt.org/listinfo/litmus-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.litmus-rt.org/pipermail/litmus-dev/attachments/20120220/afcc57ba/attachment.html>


More information about the litmus-dev mailing list