[cfe-dev] sizeof (RopeRefCountString)

Chris Lattner clattner at apple.com
Mon Sep 15 17:07:18 PDT 2008


On Sep 15, 2008, at 2:40 PM, Ted Kremenek wrote:
> On Sep 7, 2008, at 1:32 AM, Zhongxing Xu wrote:
>> In RewriteRope.cpp, RewriteRope::MakeRopeString(const char *Start,
>> const char *End),
>> we calculate the AllocSize by:
>>
>> unsigned AllocSize = sizeof(RopeRefCountString) - 1 + AllocChunkSize;
>>
>> I guess here the intention is: sizeof(RopeRefCountString) is 5. But
>> gcc says sizeof(RopeRefCountString) is 8. So the actual AllocSize is
>> 4087. Should we minus 4 instead of 1 to make the AllocSize 4084?
>
> The "-1" I believe is to accommodate for the field Data[1], which
> occupies a single byte:
>
>   struct RopeRefCountString {
>     unsigned RefCount;
>     char Data[1];  //  Variable sized.
>
>     void addRef() { ... }
>     void dropRef() { ... }
>   };
>
> By subtracting 1, the field "Data" refers to an array with size
> AllocChunkSize.

That was the intention, but it forgot the tail padding, so this is a  
real 'bug'.  The intention was the make the allocation just under a  
page in size.  Is this causing a problem in practice?

-Chris 



More information about the cfe-dev mailing list