user-0 提问: 计算结构体大小

回复:
user: user-1
content: 引用 2 楼 user-11 的回复:搜索内存对齐，就有相关说明了正解

user: user-2
content: 收获了！！！

user: user-3
content: http://www.cnblogs.com/anthow/p/3422504.html

user: user-4
content: 引用 15 楼 nice_cxf 的回复:[quote=引用 14 楼 akirya 的回复:] [quote=引用 13 楼 nice_cxf 的回复:] [quote=引用 12 楼 akirya 的回复:] [quote=引用 10 楼 nice_cxf 的回复:] [quote=引用 4 楼 u013288113 的回复:] [quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，[/quote] 对齐规则都是一样的 struct s { 	char a[3]; 	short b; }; 这个在gcc下也一样是6[/quote]  没有double类型，vs和gcc结果是一样的，找个有double的试试就知道了[/quote]  struct s { 	char a; 	double b; 	char c; }; 这种么? gcc vs 都是 24 ,能不能举个例子看看?[/quote] 我这里gcc是16啊，怎么会是24？你操作系统64位的？[/quote] 系统是64位的，但32位gcc和64位gcc的结果是一致的，全部使用默认选项。

user: user-5
content: 引用 14 楼 akirya 的回复:[quote=引用 13 楼 nice_cxf 的回复:] [quote=引用 12 楼 akirya 的回复:] [quote=引用 10 楼 nice_cxf 的回复:] [quote=引用 4 楼 u013288113 的回复:] [quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，[/quote] 对齐规则都是一样的 struct s { 	char a[3]; 	short b; }; 这个在gcc下也一样是6[/quote]  没有double类型，vs和gcc结果是一样的，找个有double的试试就知道了[/quote]  struct s { 	char a; 	double b; 	char c; }; 这种么? gcc vs 都是 24 ,能不能举个例子看看?[/quote] 我这里gcc是16啊，怎么会是24？你操作系统64位的？

user: user-4
content: 引用 13 楼 nice_cxf 的回复:[quote=引用 12 楼 akirya 的回复:] [quote=引用 10 楼 nice_cxf 的回复:] [quote=引用 4 楼 u013288113 的回复:] [quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，[/quote] 对齐规则都是一样的 struct s { 	char a[3]; 	short b; }; 这个在gcc下也一样是6[/quote]  没有double类型，vs和gcc结果是一样的，找个有double的试试就知道了[/quote]  struct s { 	char a; 	double b; 	char c; }; 这种么? gcc vs 都是 24 ,能不能举个例子看看?

user: user-5
content: 引用 12 楼 akirya 的回复:[quote=引用 10 楼 nice_cxf 的回复:] [quote=引用 4 楼 u013288113 的回复:] [quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，[/quote] 对齐规则都是一样的 struct s { 	char a[3]; 	short b; }; 这个在gcc下也一样是6[/quote]  没有double类型，vs和gcc结果是一样的，找个有double的试试就知道了

user: user-4
content: 引用 10 楼 nice_cxf 的回复:[quote=引用 4 楼 u013288113 的回复:] [quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，[/quote] 对齐规则都是一样的 struct s { 	char a[3]; 	short b; }; 这个在gcc下也一样是6

user: user-6
content: 最大字节对齐，当然你可以指定对齐方式，这样不至于不同编译器，不同编译环境可能导致不同的结果。  #pragma pack(push, 2) //对齐方式改用2字节  struct a { 	unsigned short u1; 	unsigned short u2; 	unsigned short u3; }aa;  struct b { 	char q1; 	int q2; 	short q3; }bb; #pragma pack(pop)//恢复原来默认

user: user-7
content: 其实楼主根本不了解对齐的真实含义

user: user-5
content: 引用 4 楼 u013288113 的回复:[quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 这个应该说是vs系列这里做的不够好，是按照最大的对齐，如果是gcc，32位系统下就是按4字节对齐，

user: user-8
content: 内存对齐，费了老大劲才弄明白。。。。

user: user-9
content: 引用 4 楼 u013288113 的回复:[quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 计算机为了方便取得地址

user: user-4
content: 引用 4 楼 u013288113 的回复:[quote=引用 1 楼 akirya 的回复:] 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。 [/quote] 结构体套结构体的时候，就需要用到这个了。

user: user-10
content: 计算机为了方便，都是用最大字节来分配的，所以是4+4+4 = 12

user: user-0
content: 引用 1 楼 akirya 的回复:结构体的大小是最大成员的整数倍。因为有int所以是12而不是10 为什么是最大成员的整数倍呢？  我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。  我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。

user: user-0
content: 为什么是最大成员的整数倍呢？ 我一直以为是4字节的整数位，因为是32位机，一次处理32位，所以是4字节的整数倍。 我的理解有什么偏差，您能帮我解释一下吗？  谢谢了。

user: user-11
content: 搜索内存对齐，就有相关说明了

user: user-4
content: 结构体的大小是最大成员的整数倍。因为有int所以是12而不是10