返回信息流☆─────────────────────────────────────☆
chrischen25 (蜡人) 于 (Mon Nov 9 19:23:18 2009) 提到:
struct _THUNDER{
char cAdv;
double ca;
char cTag;
char cc;
char cd;
short cb;
int iVersion;
int iUser;
char cEnd;
}Thunder;
电脑算出来的结果是40。
我在网上查询的相关网页,说法都不太一样,麻烦大牛指教一下,谢谢各位啦!
☆─────────────────────────────────────☆
kmplayer (就是喜欢她) 于 (Mon Nov 9 19:33:50 2009) 提到:
char :占8个字节
double:8个字节
char、char、char、short:8个字节
int、int:8个字节
char:8个字节。
应该是这样的吧。
☆─────────────────────────────────────☆
guo (计忆邮心|郭) 于 (Mon Nov 9 19:46:34 2009) 提到:
char 1
补7字节
double 8
char 1
char 1
char 1
补1字节
short 2
补2字节
int 4
int 4
char 1
补7字节
共40字节
☆─────────────────────────────────────☆
guo (计忆邮心|郭) 于 (Mon Nov 9 19:49:21 2009) 提到:
第一次补7是因为double需要8字节对齐
第一次补1是因为short需要2字节对齐
第一次补2是因为int需要4字节对齐
第二次补7是因为struct需要是最大成员(double)的整数倍
☆─────────────────────────────────────☆
cdy (BECKS) 于 (Mon Nov 9 20:08:13 2009) 提到:
结构体的大小需要时最大成员字节数的整数倍
☆─────────────────────────────────────☆
jmpesp (垃圾|人渣|缅甸果敢第一司令) 于 (Mon Nov 9 20:08:50 2009) 提到:
【 在 guo 的大作中提到: 】
: 第一次补7是因为double需要8字节对齐
: 第一次补1是因为short需要2字节对齐
: 第一次补2是因为int需要4字节对齐
: ...................
恩,说得很明白~~
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Mon Nov 9 21:57:49 2009) 提到:
我咋gcc和g++都是32呢?
gcc version 4.4.1
考虑,
char 4
double 8
char char char 4
short 4
int 4
int 4
char 4
所以一共32,没想明白,怎么还要8字节对齐。难道是64位机器?
☆─────────────────────────────────────☆
jmpesp (垃圾|人渣|缅甸果敢第一司令) 于 (Mon Nov 9 22:22:04 2009) 提到:
【 在 ericyosho 的大作中提到: 】
: 我咋gcc和g++都是32呢?
: gcc version 4.4.1
: 考虑,
: ...................
其实这个跟编译器有很大的关系的。
☆─────────────────────────────────────☆
chrischen25 (蜡人) 于 (Tue Nov 10 00:11:31 2009) 提到:
【 在 guo 的大作中提到: 】
: 第一次补7是因为double需要8字节对齐
: 第一次补1是因为short需要2字节对齐
: 第一次补2是因为int需要4字节对齐
: ...................
哦,好的,谢谢啦
☆─────────────────────────────────────☆
chrischen25 (蜡人) 于 (Tue Nov 10 00:11:44 2009) 提到:
谢谢各位热心人
☆─────────────────────────────────────☆
shenlei (我爱果子|[路]|天山南北|潇湘隐士) 于 (Tue Nov 10 08:02:33 2009) 提到:
我咋觉得这个取决于实现呢...
【 在 chrischen25 (蜡人) 的大作中提到: 】
: struct _THUNDER{
: char cAdv;
: double ca;
: ...................
☆─────────────────────────────────────☆
coolfantasy (Cool) 于 (Tue Nov 10 08:28:04 2009) 提到:
vc6比较笨
【 在 ericyosho (ericyosho) 的大作中提到: 】
: 我咋gcc和g++都是32呢?
: gcc version 4.4.1
: 考虑,
: ...................
☆─────────────────────────────────────☆
LoveRose (江南西道|Movie|路过团镇团正太) 于 (Tue Nov 10 10:23:56 2009) 提到:
跟编译器有关吧
【 在 shenlei (我爱果子|[路]|天山南北|潇湘隐士) 的大作中提到: 】
: 我咋觉得这个取决于实现呢...
☆─────────────────────────────────────☆
guo (计忆邮心|郭) 于 (Tue Nov 10 10:32:35 2009) 提到:
呃 确实
我也是gcc 4.4.1
不过是在x86_64的机器上试的
【 在 ericyosho 的大作中提到: 】
: 我咋gcc和g++都是32呢?
: gcc version 4.4.1
: 考虑,
: ...................
☆─────────────────────────────────────☆
xieys (枫叶/兄弟会堂主/借楼同征外援) 于 (Tue Nov 10 11:54:55 2009) 提到:
加上#pragma pack(num)就会有不同的结果
☆─────────────────────────────────────☆
goter (真三八无双) 于 (Tue Nov 10 16:40:45 2009) 提到:
最后一个char为什么要是4呢?1不就得了?
☆─────────────────────────────────────☆
epavel (Aerith) 于 (Tue Nov 10 17:38:47 2009) 提到:
【 在 goter 的大作中提到: 】
: 最后一个char为什么要是4呢?1不就得了?
为了之后如果还有结构或者类定义时寻址方便吧
☆─────────────────────────────────────☆
cyun (摸球二当家||【摸球教】之一“二”解千愁) 于 (Tue Nov 10 17:57:52 2009) 提到:
【 在 ericyosho 的大作中提到: 】
: 我咋gcc和g++都是32呢?
: gcc version 4.4.1
: 考虑,
: ...................
楼主可能在windows下,对齐比较严格,double的地址都应该是8的倍数
而如果使用linux+gcc的话double会是4对齐,只有gcc -malign-double 会是8对齐
☆─────────────────────────────────────☆
ssailing (sailing) 于 (Tue Nov 10 18:57:33 2009) 提到:
【 在 cyun 的大作中提到: 】
: 楼主可能在windows下,对齐比较严格,double的地址都应该是8的倍数
: 而如果使用linux+gcc的话double会是4对齐,只有gcc -malign-double 会是8对齐
正解
linux下gcc默认是4字节对齐,linux需要在makefile中更改
而在Windows下VC的默认对齐是8字节,可以通过菜单修改
☆─────────────────────────────────────☆
laser (回头瞧一瞧) 于 (Tue Nov 10 20:00:58 2009) 提到:
这个跟设置的编译器的对齐因子有关系!如果按8字节对齐就是40,按照4对齐就是32
☆─────────────────────────────────────☆
goter (真三八无双) 于 (Wed Nov 11 08:24:40 2009) 提到:
【 在 epavel 的大作中提到: 】
: 为了之后如果还有结构或者类定义时寻址方便吧
struct ss{
char a;
char b;
char c;
}
这个的大小是3,不是4
这是一条镜像帖。来源:北邮人论坛 / cpp / #41162同步于 2010/7/10
CPP机器人发帖
[合集] 【求助】关于内存对齐的问题
shenlei
2010/7/10镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。