what do you mean by Whatever it is, DF will return that when reporting a body size
If the offset is correct, it should be possible to monitor the body size of a creature at intervals over time. DF knows what it's doing, so asking DF the current body size will follow the correct formula. That will settle the question of whether it grows linearly in each life stage or just pops into a new size at the correct age. But it's kind of irrelevant if you can just look up a creature's current size on the fly.
Even without DFHack, it's conceivable to butcher the same animal every couple months with savescumming.
ah yes ok. from what i could tell looking at specific animals and the body_size_info structure in dfhack, the base_size was very close, or exactly the caste's average size with body modifiers applied. the size_cur was usually larger (i don't remember if it was ever smaller) than the base size. so i believe that's the current size with fat/muscle the creature has gained, but again i'm not certain.
I'm looking at an adult donkey (whose description makes no mention of size, muscle or fat) so it ought to be around 300,000 cm^3, but body_size_info.size_cur is 26060 and size_base is 27600. So it is certainly possible for the size_cur to be smaller than size_base.
Both are about an order of magnitude smaller than the raws indicate they should be. So I'm guessing these values are in 10 cm^3 units.
I've got a 4 month old peacock that has (according to dfhack's gui/gm-editor) size_cur of 161 and size_base of 162. The raws are:
[BODY_SIZE:0:0:100]
[BODY_SIZE:0:168:2000]
[BODY_SIZE:1:0:4000]
So it should be born at 100 cm^3 and at 6 months (168 days) should be up to 2000 cm^3. Assuming a linear progression, and assuming that the 4 months reported by DT for the age is exact, it ought to be 100+(4/6 * (2000-100)) or 1367. Its description says it is "incredibly skinny yet gigantic overall." In appearance.body_modifiers there are 107,104,102 which I'm guessing are the length, height, and broadness from the raws' BODY_APPEARANCE_MODIFIER tags. The size_modifier is 113, and 1.07*1.04*1.02 is 1.13, so I suspect that's what size_modifier is. So that would mean that its size_base ought to be 1367 * 1.13, or 1544 cm^3, which is short of the 1620 I'm seeing. Ahh, but a little calculation shows that if it's actually 4.21 months (which DT would round to 4 months), then this comes out just right.
Looking back at the donkey above, it's size_modifier is 92, so .92 * 300000 = 276000, which matches up to the size_base value of 27600. So it does look like the size_base matches up to what one would expect. Your guess that size_cur takes into account fat/muscle seems to make sense, but I can't find anything in the data structures that seems to be the fat or muscle modifiers. Plus, I would expect an 'incredibly skinny' peacock to be smaller than 1610 if its base should be 1620. :-/
I've got to run catch a bus, but I'll keep looking at this.
Keith