On 06/05/2013 05:28 PM, li guang wrote:
> 在 2013-06-05三的 05:49 -0700,Richard Henderson写道:
>> On 06/04/2013 06:56 PM, li guang wrote:
>>>>> +typedef struct {
>>>>> +    uint32_t len __attribute__((aligned((sizeof(void *)))));
>>>>> +    uint32_t cie_offset;
>>>>> +    tcg_target_long func_start __attribute__((packed));
>>>>> +    tcg_target_long func_len __attribute__((packed));
>>> suspicious usage of packed attribute here,
>>> since tcg_targe_long is either 32 or 64 bits,
>>> not a struct or union.
>>>
>>> Thanks!
>>>
>>
>> Your question is worded poorly -- what has struct/union got to do with it?  
>> One
>> can adjust the alignment of any type.  Perhaps you don't know what it is that
>> __attribute__((packed)) actually does?
> 
> referred from gcc manual:
> "This attribute, attached to struct or union type definition, specifies
> that each member (other than zero-width bitfields) of the structure or
> union is placed to minimize the memory required."
> 
> so, what I mean is as the manual said, this attribute mostly applies to
> struct or union.

>From the gcc manual:

@cindex @code{packed} attribute
The @code{packed} attribute specifies that a variable or structure field
should have the smallest possible alignment---one byte for a variable,
and one bit for a field, unless you specify a larger value with the
@code{aligned} attribute.

Notice "or structure field", which is exactly what I have above.

> forgive me if the question is fool,
> packed means seize minimal memory size, right?

It really means minimal alignment.  Which means that no padding will be added
to ensure alignment.  Which can lead to a reduction in memory size, but that's
not the major point.


r~


Reply via email to