티스토리 뷰

개발/Linux

__alignof__, aligned 매크로

Jaeyeon Baek 2011. 12. 2. 10:11


gcc의 기능으로 주어진 형식이나 lvalue의 정렬을 위해 필요한 byte 수를 알려줍니다. 이를테면 아래와 같은 코드를 통해서 구조체가 몇 byte로 align되어 있는지 확인 할 수 있습니다.

printf(" align : %u \n",__alignof__(struct test));

32bit Kernel의 경우 기본 4byte, 64bit Kernel의 경우 8byte align되었을을 확인하도록 합니다. 또한 유사한 명령으로 구조체의 align을 변경할 수 도 있습니다. 아래 코드를 참조하도록 합시다.

struct compat_group_req {
    __u32                            gr_interface;
    struct __kernel_sockaddr_storage gr_group
            __attribute__ ((aligned(4)));
} __packed;


추가로 현재 구현되어 있는 Kernel 구조체에 적용할때는 그로인한 문제가 발생되는지 여부에 대해 따져보고 적용하도록 해야 합니다. 해당 구조체의 offset 계산하는 루틴이 사용되는곳이 있다면 오동작을 배제할 수 없습니다.


'개발 > Linux' 카테고리의 다른 글

offsetof 매크로  (0) 2011.12.05
Kernel ipt_get_entries struct .. size  (0) 2011.12.04
Kernel Netfilter socket option (getsockopt, setsockopt)  (2) 2011.12.02
64bit kernel + 32bit iptables (Application)  (0) 2011.11.30
find command  (0) 2011.11.29
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday