Re: [PATCH] bisect: save heap memory. allocate only the required amount

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 26/08/14 13:14, Jeff King wrote:
> On Tue, Aug 26, 2014 at 12:57:21PM +0100, Ramsay Jones wrote:
> 
>>> +	ret = xcalloc(1, base + extra);
>>> +	va_start(ap, fmt);
>>> +	vsnprintf(ret + offset, extra, fmt, ap);
>>
>> What is the relationship between 'base' and 'offset'?
>>
>> Let me assume that base is always, depending on your compiler, either
>> equal to offset or offset+1. Yes? (I'm assuming base is always the
>> sizeof(struct whatever)). Do you need both base and offset?
> 
> It's much more complicated than that. Take "struct name_decoration", for
> instance, which looks like this:
> 
>   struct name_decoration {
> 	struct name_decoration *next;
> 	int type;
> 	char name[FLEX_ARRAY];
>   };
> 
> On my 64-bit system using gcc, sizeof() returns 16; it has to pad the
> whole thing to 64-bit alignment in case I put two of them in an array.
> But offsetof(name) is 12, since the array of char does not need the same
> alignment; it can go right after the type and make use of the padding
> bits.

Hmm, interesting. I must re-read the standard. I was convinced that the
standard *requires* any alignment padding to come *before* the name field.
(how would you put a, non-trivial, variable data structure into an array?)

ATB,
Ramsay Jones


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]