[cfe-dev] sizeof (RopeRefCountString)
Zhongxing Xu
xuzhongxing at gmail.com
Mon Sep 15 18:34:06 PDT 2008
2008/9/16 Chris Lattner <clattner at apple.com>
> 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?
No, it's not causing any problem in practice.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20080916/491eea1e/attachment.html>
More information about the cfe-dev
mailing list