[Top][All Lists]
[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