zoukankan      html  css  js  c++  java
  • C结构体对齐

    函数模板针对仅参数类型不同的函数?
     
    http://blog.csdn.net/renrenhappy/article/details/5931457
     
      计算结构体的大小就要考虑数据对齐问题. 为了使CPU的存取速度最快, 在处理数据的时候把结构变量中的成员大小按照4或8的倍数计算, 这是因为数据总线的宽度一般为4字节或者8字节. 
     
        可加上#pragma pack(n)的设定. 
        缺省情况下, 编译器为结构体的每个成员按其自然对界条件分配空间(即按照结构体成员之中最大的成员对齐). 
        默认的字节对齐准则如下: 
        1. 结构体变量的首地址能够被其最大的成员大小整除.
        2. 结果体每个成员相对于结构体首地址的Offset是成员大小的整数倍, 这也是为什么一个char 后边接一个int, 那个char要被填充3个字节的原因, 如果是3个char一个int, 则填充一个字节. 在本题之中, int64_t c的偏移要是8的整数倍. 
        3. 结构体的总大小为结构体最大基本类型成员大小和编译器缺省对界条件大小中比较小的那个值的整数倍, 如果有需要, 会在最后一个成员之后加上填充字节.
       4.结构体作为成员时, 则结构体成员要从其内部最大元素大小的整数倍地址开始存储. 
        在本题中, char a; 4, int b; 4,  int64_t c; 8, chard; 8. 结构体总共24个字节, 24x15 + 8 == 368. 
  • 相关阅读:
    Codeforces Round #674 (Div. 3)C. Increase and Copy
    Calendar Game
    poj3255Roadblocks
    L2-008 最长对称子串
    L2-004 这是二叉搜索树吗?
    D. Boboniu Chats with Du Codeforces Round #664 (Div. 2)
    暑假了,冲冲冲
    逆元和同余
    懒惰的我
    Codeforces Round #594 (Div. 2) C题
  • 原文地址:https://www.cnblogs.com/newcoder/p/5218211.html
Copyright © 2011-2022 走看看