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 14:47:00 -0400

On Fri, 14 Apr 2006 09:30:46 -0700, Curt McDowell wrote:
>Still, a union is not called for:
>
>struct {
>  struct pbuf pbuf;
>  u64_t payload[MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) / sizeof(u64_t)];
>} pbuf_pool_memory[PBUF_POOL_SIZE];
>
>Or, if it's more pleasing, we could define a "maximal" type somewhere
>and use that for payload[].  "struct mem" does that in mem.c, except it
>should be defined in a header file to clean it up.

I think the latter is preferable for three reasons. First, even u64_t
isn't required to be maximally aligned under ANSI-C (although in
practice I've never seen a case where it wasn't). Second, there are
some compilers without native unsigned 64-bit integer. Third,
allocating an array of 'memory aligned types' allows targets with
limited memory to avoid allocating unused memory.

The declaration needs to be reworked a bit as the one given won't
allocate enough space when MEM_ALIGNMENT is less than 8 (e.g. if
MEM_ALIGNMENT is 4 and PBUF_POOL_SIZE is 1540, only 1536 bytes are
allocated in payload).

Something along these lines should work:
MAX_ALIGN_T
payload[(PBUF_POOL_BUFSIZE+sizeof(MAX_ALIGN_T)-1)/sizeof(MAX_ALIGN_T)];


I'd like to offer my thanks to you for addressing these issues. I
think they consumed the majority of the time I spent porting lwIP.
Getting the alignment issues fixed will be a major improvement to the
code base.
-- 
Derek Guerdon





reply via email to

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