zoukankan      html  css  js  c++  java
  • No Memory Alignment with GCC

    1. attribute method:

      #include <stdio.h>
      
      struct packed
      {
          char a;
          int b;
      } __attribute__((packed));
      
      struct not_packed
      {
          char a;
          int b;
      };
      
      int main(void)
      {
          printf("Packed:     %zu
      ", sizeof(struct packed));
          printf("Not Packed: %zu
      ", sizeof(struct not_packed));
          return 0;
      }

      Output:

      $ make example && ./example
      cc     example.c   -o example
      Packed:     5
      Not Packed: 8
    1. pragma pack method:

      #include <stdio.h>
      
      #pragma pack(1)
      struct packed
      {
          char a;
          int b;
      };
      #pragma pack()
      
      struct not_packed
      {
          char a;
          int b;
      };
      
      int main(void)
      {
          printf("Packed:     %zu
      ", sizeof(struct packed));
          printf("Not Packed: %zu
      ", sizeof(struct not_packed));
          return 0;
      }

      Output:

      $ make example && ./example
      cc     example.c   -o example
      Packed:     5
      Not Packed: 8
    2. Add -fpack-struct to GCC
      -fpack-struct[=n]
      Without a value specified, pack all structure members together without holes. When a value is specified (which must be a small power of two), pack structuremembers according to this value, representing the maximum alignment (that is, objects with default alignment requirements larger than this will be outputpotentially unaligned at the next fitting location.

      Warning: the -fpack-struct switch causes GCC to generate code that is not binary compatible with code generated without thatswitch. Additionally, it makes the code suboptimal. Use it to conform to a non-default application binary interface.



  • 相关阅读:
    137. Single Number II (Bit)
    136. Single Number (Bit)
    89. Gray Code (Bit)
    57. Insert Interval (Array; Sort)
    56. Merge Intervals (Array; Sort)
    UNIX 网络编程笔记-CH3:套接字编程简介
    UNIX 网络编程笔记-CH2:TCP、UDP概貌
    TSP-旅行商问题
    Java 集合:迭代器(Iterator, Iterable)
    PAT 1029. Median
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7201795.html
Copyright © 2011-2022 走看看