lwip-users
[Top][All Lists]
Advanced

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

Re: [lwip-users] about alignment issues.


From: Derek Guerdon
Subject: Re: [lwip-users] about alignment issues.
Date: Fri, 14 Apr 2006 00:43:20 -0400

On Thu, 13 Apr 2006 16:16:43 -0700, Curt McDowell wrote:
>Unions are really ugly, and I don't think they're necessary in pbuf.c.  But
>your idea to use an embedded structure is good.  How about the following?
>
>struct {
>  struct pbuf pbuf;
>  u8_t payload[MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE)];
>} pbuf_pool_memory[PBUF_POOL_SIZE];
>
>The alignment requirement of a structure is the maximum of the alignment
>requirements of any member of the structure.  struct pbuf is intrinsically
>aligned.
A struct pbuf is only guaranteed to be suitably aligned for the three
data types it contains: void*, struct pbuf*, and u16_t. There is no
guarantee that this will result in maximum alignment.


>This alignment is inherited by the outer structure and the payload is
>also suitably aligned.
The payload is only guaranteed to be suitably aligned for a u8_t. Even
if sizeof(struct pbuf) is a multiple of the memory alignment, there is
no guarantee that padding bytes aren't inserted after pbuf, which
would leave payload unaligned.

A union may not be aesthetically pleasing, but it can ensure that a
u8_t array is properly aligned for another data type.
-- 
Derek Guerdon





reply via email to

[Prev in Thread] Current Thread [Next in Thread]