• C++ sizeof()练习


    class A
    {
            int a;
            short b;
            int c;
            char d;
    };
    class B
    {
            double a;
            short b;
            int c;
            char d;
    };
    在32位机器上用gcc编译以上代码,求sizeof(A),sizeof(B)分别是多少。

    其实不同编译器答案是不一样的。

    linux下double的对齐方式是4字节,而windows默认是8字节。。。

    linux可以通过如下方式控制对齐方式

    class B

    {

    double a;

    short b;

    int c;

    char d;

    }__attribute__((aligned(8)));

    而WINDOWS是通过#pragma pack(n) 来控制编译器按照n个字节对齐。

    但是如果按照大家比较能够理解的说法:

    根据以下条件进行计算:
    1、  结构体的大小等于结构体内最大成员大小的整数倍
    2、  结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址偏移量应该是8的倍数。
    3、  为了满足规则1和2编译器会在结构体成员之后进行字节填充!

    那么答案就是:windows下编译答案是C, gcc下编译答案是D

  • 相关阅读:
    getopt( )和 getopt_long( )
    关于跳跃表 转
    进程控制块的存放和当前进程的确定
    BUAA_OO_2020_Unit1 Summary
    熟悉常用的Linux操作
    编译原理
    词法分析
    组合数据类型练习
    实验一 词法分析实验
    简化版C语言文法
  • 原文地址:https://www.cnblogs.com/klcf0220/p/4599302.html
Copyright © 2020-2023  润新知