社区
C语言
帖子详情
求sizeof
xgbing
博客专家认证
2011-02-17 03:35:59
struct ss
{
char a;
short b;
double c;
char d;
};
求sizeof
为什么是16,gcc下编译
...全文
324
41
打赏
收藏
求sizeof
struct ss { char a; short b; double c; char d; }; 求sizeof 为什么是16,gcc下编译
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
41 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hrx1989
2011-02-19
打赏
举报
回复
gcc编译器能够更加的优化!
赵4老师
2011-02-18
打赏
举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
dane_max
2011-02-18
打赏
举报
回复
根据结构体对齐规则, 在32位机器里,机器字长是4, gcc编译器默认是按 4 对齐,但是在里边,char short 变量分别在内存中占 1, 2 字节,那么 就取小对齐, a 可以任意位置对齐, b 按 2*n 的位置对齐,那么 a 和 b 之间就有个 字节空间 空着没用,但是会算结构体的大小, double 是 8 个byte, 但是,超过机器字长,编译器会按机器字长对齐,后面的char 会占一个字节,但是为确保下一个结构体也可以对齐,所以d 后面还空 3 byte 算是该结构体的
内存地址 size
0x00 1 char
0x01 1 空
0x02 2 short
0x04 8 double
0x12 1 char
0x13 3 空
maoloverme1
2011-02-18
打赏
举报
回复
我在运行的时候也是24.是不是LZ的编译器对这个结构进行了优化。如果下面的应该就是16了
struct ss
{
char a;
short b;
char d;
double c;
};
AnYidan
2011-02-18
打赏
举报
回复
记忆力好的,分析逻辑强的。。。我佩服你们
我只是:
管它与什么有关,管它什么编译器
需要的时候在所用的系统下,打开编译器,sizeof 一下,
c_bee
2011-02-18
打赏
举报
回复
是的 lZ的说法不大妥当 应该是跟编译器和机器位宽有关系
sillior
2011-02-18
打赏
举报
回复
32位机器: 需要补齐四位
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
charshort---~~~~double--------------------------char~~~~~~~~~~~~
~代表自动补齐的位
char a; 和
short b;
占4个字节
double c;
占8个字节
char d;
占4个字节
4+8+4=16
64位机器需要补齐8个字节
上面8不变 4改为8
8+8+8=24
wolaiye_1_3
2011-02-18
打赏
举报
回复
取决于变异器是8字节对齐还是4字节对齐 和编译器设置和类型有关系。
jackiesen
2011-02-18
打赏
举报
回复
这个和操作系统的位数有关。如果你是32位操作系统应该,以8对齐,应该就是 8+8+8=24。
c_bee
2011-02-18
打赏
举报
回复
同意这个观点
[Quote=引用 30 楼 sillior 的回复:]
32位机器: 需要补齐四位
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
charshort---~~~~double--------------------------char~~~~~~~~~~~~
~代表自动补齐的位
char a; 和
short b;
占4个字节
double……
[/Quote]
-迷糊-
2011-02-18
打赏
举报
回复
VC6.0表示也是24,可以解释。。。
漫步者、
2011-02-18
打赏
举报
回复
[Quote=引用 19 楼 sum212aver 的回复:]
对齐 同补齐的问题 要取绝与是什么系统 ab
a a a<>aa;[]aaaffff m$m
[/Quote].对的
gracedida
2011-02-18
打赏
举报
回复
学习了,得到24
挨踢民工的乐章
2011-02-17
打赏
举报
回复
http://topic.csdn.net/u/20101025/22/26d5c57d-08b2-4999-a80c-de03612653b8.html
这个帖子说的很清楚
wxwlll
2011-02-17
打赏
举报
回复
[Quote=引用 6 楼 xgbing 的回复:]
引用 3 楼 justkk 的回复:
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padd……
[/Quote]
在VC中的各种类型的数据空间大小都是可以设置的,gcc没用过不太清楚!
wopabe
2011-02-17
打赏
举报
回复
LZ 没有对齐
sum212aver
2011-02-17
打赏
举报
回复
sum212aver
2011-02-17
打赏
举报
回复
对齐
同补齐的问题
要取绝与是什么系统
ab
a a a<>aa;[]aaaffff m$m
pfugwtg
2011-02-17
打赏
举报
回复
sizeof计算结构字节有两种算法,一种是使成员的地址在
字
边界对齐,另一种是使成员的地址在
字节
边界对齐。
结果为16说明用的是第一种算法,而且你用的电脑是32位(即4字节)机,因此char a;虽为1字节,但因为是字对齐,因此占4字节。同理,short b;(2字节)double c;(4字节)char d;(1字节)各占4字节,故而结果为16字节。
若用第二种算法则为8字节(1+2+4+1=8字节)。
正是因为不同的算法和系统可能导致不同的结果,因此才用sizeof来计算。
justkk
2011-02-17
打赏
举报
回复
不懂 在我的linux环境中
gcc 编译结果也是 24
加载更多回复(15)
《C语言基础》 之 第3章 运算符
课程内容:表达式、赋值运算符1、赋值预算符2、关系运算符1、关系运算符2、逻辑运算符1 、逻辑运算符2、逻辑运算符3、
sizeof
运算符1 之 内存结构、
sizeof
运算符2 之 基本类型回顾 、
sizeof
运算符3 之
sizeof
的使用、...
int *p=malloc(100);
求
sizeof
(p)
求
sizeof
(p)
sizeof
(p) = 4;
sizeof
(p) 只能测定 指针大小,32位机上得4。
sizeof
不能测定动态分配的数组大小。 strlen 可用于测定动态分配的字符数组长度但不适合int. _msize() 可用于测定动态分配的数组用...
int *(*a)[3][4]和int **a[3][4]
求
sizeof
(a)或
sizeof
(*a)或
sizeof
(**a)等的对比
int *(*a)[3][4],
求
sizeof
(a)、
sizeof
(*a)、
sizeof
(**a)、
sizeof
(***a)、
sizeof
(****a) int **a[3][4],
求
sizeof
(a)、
sizeof
(*a)、
sizeof
(**a)、
sizeof
(***a)、
sizeof
(****a) Tips:在32位机器下运行的结果,指针...
定义一个空类型,里面没有任何成员变量和成员函数。对该类型
求
sizeof
结果?
对该类型
求
sizeof
结果? 结果为1 。 为什么不是0? 空类型实例中不包含任何信息,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占多少空间,由编译器决定。...
常问面试题:C++中
sizeof
的陷阱及应答
C++中
sizeof
是经常被问到的一个...面试题:定义一个空的数据类型,里面没有任何成员变量和成员函数,对该类型
求
sizeof
,得到的结果是多少? 答案:是1,为什么不是0?空类型的实例中不包含任何信息,本来
求
sizeof
应该
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章