在内存中占几个字节?

xray2005 2010-05-09 11:35:54
如:
struct xxx
{
char a,
int b,
char c
}

在内存中占几个字节?怎么计算得来的?
...全文
1313 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
mainsea 2012-02-23
  • 打赏
  • 举报
回复
好久没回帖了。。。。
dezhengwei 2010-08-15
  • 打赏
  • 举报
回复
struct xxx
{
char a,
int b,
char c
}
来晚了啊!
linwendong1982 2010-05-10
  • 打赏
  • 举报
回复
c++中内存字节对齐原则:
一、在默认情况下,vc规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量存放时根据在结构体中出现的顺序依次申请空间,同事按照对齐方式调整,空缺的字节vc会自动填充。同事vc为了确保结构的大小为结构的字节边界数(即该结构中所占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
二、vc中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节就是说变量存放的起始地址的偏移量有两种情况:第一,如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认对齐方式;第二,如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构总大小必须为占用空间最大变量所占用的空间数的倍数;否则,必须为n的倍数。
liutao2075 2010-05-10
  • 打赏
  • 举报
回复
不一定,char占一个字节,但int型根据不同的编译器,结构是不同的,可能是两个或者四个,所以为1+2+1或者1+4+1
wcqqq 2010-05-10
  • 打赏
  • 举报
回复
学习!!!!!
Larry316 2010-05-10
  • 打赏
  • 举报
回复
学习、、了,不过理论上还是4或者6个字节吧!
狂龙骄子 2010-05-09
  • 打赏
  • 举报
回复
同意,跟不同的编译器有关~~

[Quote=引用 6 楼 skyworth98 的回复:]
这个跟内存对齐方式有关
为了让内存操作更快,cpu一般要求内存的起始地址满足一定的条件,比如为2,4,8的倍数等等


引用楼主 xray2005 的回复:
如:
struct xxx
{
char a,
int b,
char c
}

在内存中占几个字节?怎么计算得来的?
[/Quote]
battlec13333 2010-05-09
  • 打赏
  • 举报
回复
应该是12
视最长长度成员而定
z569362161 2010-05-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100108/20/83248e78-6e1f-4050-b2db-ea0c58b1a9c0.html?54997

看这个帖子里我的回答,别人的就不要看了。

看了你也不太明白,他们也不太明白。
某某9 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 crcr 的回复:]

如:
struct xxx
{
char a,
int b,
char c
} ;

在vc编译器中,int占用4个字节,所以该结构体占用字节为1+4+1=6。
在tc编译器中,int占用2个字节,所以占用字节为1+2+1=4
[/Quote]up
向立天 2010-05-09
  • 打赏
  • 举报
回复
这种结构的声明方式不是很合理
会占用12个字节
浪费了6个
  • 打赏
  • 举报
回复
如:
struct xxx
{
char a,
int b,
char c
} ;

在vc编译器中,int占用4个字节,所以该结构体占用字节为1+4+1=6。
在tc编译器中,int占用2个字节,所以占用字节为1+2+1=4
wuyu637 2010-05-09
  • 打赏
  • 举报
回复
字节对齐
chaoliu1024 2010-05-09
  • 打赏
  • 举报
回复
和编译器有关,不同的编译器int型占得字节数是不同的,char一般都是一个字节
南气子水 2010-05-09
  • 打赏
  • 举报
回复
struct   xxx 
{
char a, //1字节
int b, //4字节
char c //1字节
}

#include <stdio.h>
struct xxx
{
char a;
int b;
char c;
};
void main()
{
printf("%d\n",sizeof(xxx));
}
//运行结果12
skyworth98 2010-05-09
  • 打赏
  • 举报
回复
这个跟内存对齐方式有关
为了让内存操作更快,cpu一般要求内存的起始地址满足一定的条件,比如为2,4,8的倍数等等

[Quote=引用楼主 xray2005 的回复:]
如:
struct xxx
{
char a,
int b,
char c
}

在内存中占几个字节?怎么计算得来的?
[/Quote]
cppresearcher 2010-05-09
  • 打赏
  • 举报
回复
12个字节。为了提高内存的读取速度,一般CPU会把数据存到易于计算的内存的地址上。
pengzhixi 2010-05-09
  • 打赏
  • 举报
回复
12 !!
ValentinsLee 2010-05-09
  • 打赏
  • 举报
回复
struct xxx
{
char a;
int b;
char c;
printf ("%d",sizeof(a));
printf ("%d",sizeof(b));
printf ("%d",sizeof(c));
}
tankeco 2010-05-09
  • 打赏
  • 举报
回复
一般计算是1+2(4)+1=4(6)(在TC下int2字节,在VC等下面int4字节)
但是由于编译器等原因,在结构类型后面还会有一些附加的数据,所以会比4(6)大

总结一下就是不一定。。。可以用sizeof(xxx)查看。
加载更多回复(12)

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧