如何确定C中结构的大小

时间:2016-12-10 17:23:32

标签: c linked-list structure nodes

我有以下代码:

#include<stdio.h>
typedef struct _node_1
{
    int number;
    int scores;
    int xyz;
    double p; 
} Node_1;

typedef struct _node_2
{
    int number;
    int scores;
    int xyz;
    struct _node_2 *p; 
} Node_2;

typedef struct _node_3
{
    int number;
    int scores;
    int xyz;
    struct _node_2 p; 
} Node_3;
int main()
{
    printf("%d\n",sizeof(Node_1));
    printf("%d\n",sizeof(Node_2));
    printf("%d",sizeof(Node_3));
    return 0;
}

,输出为:

24
24
40

我的问题是为什么这3个例子的输出结果是这样的,我们如何确切地确定结构的大小?顺便说一下,我的操作系统是64位。谢谢!

1 个答案:

答案 0 :(得分:2)

第一个&amp;第二个,你会期望4 + 4 + 4 + 8 = 20,因为内部数据的大小,但你忘了对齐

64位指针&amp;双精度(64位)也需要与8字节边界对齐。编译器为此插入一个4字节的填充。