2014-04-06 46 views
2

我做了一个在C双向链表结构,并且需要知道如何计算定制结构的大小。我理解某些数据类型的大小和指针在我的机器上的8个字节。结构尺寸用C

然而,当我创建这个数据类型

struct doublylinked { 
    int data; 
    struct doublylinked *next; 
    struct doublylinked *prev; 
}; 

我得到的所有值内总共加起来20个字节。数据的

大小= 4

大小分组的下一= 8

大小= 8

然而,当我打印出来的大小此数据类型的其等于24.

大小doublylinked = 24

在哪里这些额外的4个字节是从哪里来的?

感谢

+1

请删除C++代码。额外的4个字节可能来自对齐。你正在使用哪种编译器? – lpapp

+1

http://en.wikipedia.org/wiki/Data_structure_alignment –

+0

编译器GCC是。使用sizeof(struct doublylinked)检查大小...谢谢你将检查结构对齐 –

回答

3

额外的空间来自由编译器,这使得访问某些CPU快加入填充。

它实际上可能是这样的记忆:

data  [4 bytes] 
padding [4 bytes] <- That way, next is aligned on a multiple of his own size 
next  [8 bytes] 
prev  [8 bytes] 
0

8字节nextprev变量需要有一个8字节对齐。

换句话说,它们需要被定位在由8

整除存储器地址所以编译器之前或4个字节的data可变后增加了一个4字节的填充。

请注意,这通常是平台相关的(即,一些处理器可以支持未对齐加载/存储操作,在这种情况下,编译器可以选择,以避免填充)。