Skip to content
Snippets Groups Projects
  • Marian Buschsieweke's avatar
    4b8881ab
    gnrc/netif/hdr.h: Optimized structure layout · 4b8881ab
    Marian Buschsieweke authored
    Reordered struct members to not waste memory due to padding.
    
    Before:
    ``` C
    typedef struct {
        uint8_t src_l2addr_len;
        uint8_t dst_l2addr_len;
        kernel_pid_t if_pid;    // <-- 16 bit, is aligned to 16 bit
        uint8_t flags;
        uint8_t __padding_byte; // <-- Inserted to fulfill padding requirements
        int16_t rssi;           // <-- 16 bit, is NOT aligned to 16 bit
        uint8_t lqi;
        uint8_t __padding_byte2;// <-- Inserted to fulfill padding requirements
    } gnrc_netif_hdr_t;
    ```
    
    Now:
    ``` C
    typedef struct {
        uint8_t src_l2addr_len;
        uint8_t dst_l2addr_len;
        kernel_pid_t if_pid;    // <-- 16 bit, is aligned to 16 bit
        uint8_t flags;
        uint8_t lqi;
        int16_t rssi;           // <-- 16 bit, is aligned to 16 bit
    } gnrc_netif_hdr_t;
    ```
    
    When build for the `bluepill` board, the new layout reduces the size by 2 bytes.
    4b8881ab
    History
    gnrc/netif/hdr.h: Optimized structure layout
    Marian Buschsieweke authored
    Reordered struct members to not waste memory due to padding.
    
    Before:
    ``` C
    typedef struct {
        uint8_t src_l2addr_len;
        uint8_t dst_l2addr_len;
        kernel_pid_t if_pid;    // <-- 16 bit, is aligned to 16 bit
        uint8_t flags;
        uint8_t __padding_byte; // <-- Inserted to fulfill padding requirements
        int16_t rssi;           // <-- 16 bit, is NOT aligned to 16 bit
        uint8_t lqi;
        uint8_t __padding_byte2;// <-- Inserted to fulfill padding requirements
    } gnrc_netif_hdr_t;
    ```
    
    Now:
    ``` C
    typedef struct {
        uint8_t src_l2addr_len;
        uint8_t dst_l2addr_len;
        kernel_pid_t if_pid;    // <-- 16 bit, is aligned to 16 bit
        uint8_t flags;
        uint8_t lqi;
        int16_t rssi;           // <-- 16 bit, is aligned to 16 bit
    } gnrc_netif_hdr_t;
    ```
    
    When build for the `bluepill` board, the new layout reduces the size by 2 bytes.