这个结构的大小不会加起来

时间:2012-09-18 05:51:46

标签: c++ struct sizeof

  

可能重复:
  Why isn't sizeof for a struct equal to the sum of sizeof of each member?
  sizeof(struct) returns unexpected value

我编写了一个程序来查找以下struct abc的大小。

一个。内置的sizeof()运算符在实际为32时将此结构的大小提到40?此外,我尝试减去地址以确定这一点,它也导致40。

湾当我评论出“char g [3];”在struct abc里面,abc的大小= 32。 这对我来说也没有任何意义。这不应该是28?

℃。为什么我需要转换为“unsigned int”?如果我不进行转换,我会收到以下编译错误消息。是不是& a [0]实际上是一个地址(应该是一个int)?

size_of_struct \ size_of_struct.cpp(24):错误C2440:'=':无法从'abc *'转换为'unsigned int'

的信息: 我正在运行win 7,64位系统。 MS visual studio编译器。

#include <iostream>

struct char_three{
    char a[3];
};

struct int_three{
    int a[3];
};

struct abc 
{
    int a; // 4 bytes
    double b; // 8
    void *ptr; // 4
    char g[3]; // 4 due to padding ?
    int c[3]; // 12
}; // Total size of struct - 31 / 32.

int main () 
{
    abc a[2]; 
    unsigned int add0, add1;
    add0 = (unsigned int) &a[0];
    add1 = (unsigned int) &a[1];
    printf("add1 of a is :%x add0 is :%x\n", add1, add0);

    printf("size of struct abc : %d\n", add1-add0);
    printf("size of int: %d\n", sizeof(int));
    printf("size of double: %d\n", sizeof(double));
    printf("size of void ptr: %d\n", sizeof(void *));
    printf("size of 3 char: %d\n", sizeof(char_three));
    printf("size of 3 int: %d\n", sizeof(int_three));
    printf("size of a: %d\n", sizeof(a));
    system("pause");
    return 0;
}

O/P:
add1 of a is :51f828 add0 is :51f800
size of struct abc : 40
size of int: 4
size of double: 8
size of void ptr: 4
size of 3 char: 3
size of 3 int: 12
size of a: 80
Press any key to continue . . .

1 个答案:

答案 0 :(得分:0)

您不能明确依赖结构的sizeof()。它的实现定义了编译器是否引入了填充,如果是,则引入填充。如果您使用兼容GCC的编译器并且不介意其他工具链(等等,还有其他工具链吗?),您可以使用__attribute__((packed))告诉编译器根本不要在结构中添加填充。