In your lwipopts.h what have you set for MEM_ALIGNMENT ?

// MEM_ALIGNMENT: should be set to the alignment of the CPU for which lwIP is compiled.
#define MEM_ALIGNMENT           4

Terry

On 27/05/2019 04:17, [email protected] wrote:
Could anyone give me some advice?

I recently use mem_alloc() to allocate a structure memory which have a int64 member. However, mem_alloc() returns a memory poniter which is 4 byte aligned which cause a memory unaligned fault.
The code is as follows,

ifp=mem_alloc(sizeof(structure interface));

The structure intrface has a member flags which is int64. The size of structure interface is 112 which is a multiple of 8 while the address returned is 0x720ef324 which is not 8 byte aligned. So when I want to access ifp->flags, an unaligned fault will be triggered.

Could any give some hint?
Thanks!
Best regards,

yan



    On 05/25/2019 22:19, yanhc519 <mailto:[email protected]> wrote:
    Hi all.

    What is the memory alignment of the pointer returned by
    mem_alloc() in mem.c?
    Since the only argument of mem_alloc() is size, so what alignment
    will mem_alloc() choose?

    In http://man7.org/linux/man-pages/man3/malloc.3.html, it says
    "/The malloc() and calloc() functions return a pointer to the
    allocated memory, which is suitably aligned for any built-in type./"
    Since the largest type is double or int64 which are 8 bytes, so I
    guess /malloc() /in linux will choose alignment of 8 bytes.

    Is this guess also applied to mem_alloc() in LwIP?
    That is, does mem_alloc() in LwIP also choose alignment of 8 bytes?

    Thanks!
    Best regard,

    yan


_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to