首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

在内存中占几个字节?解决思路

2012-03-29 
在内存中占几个字节?如:structxxx{chara,intb,charc}在内存中占几个字节?怎么计算得来的?[解决办法]google

在内存中占几个字节?
如:
struct   xxx
{
    char   a,
    int   b,
    char   c
}

在内存中占几个字节?怎么计算得来的?

[解决办法]
google内存对齐。。
[解决办法]
一般计算是1+2(4)+1=4(6)(在TC下int2字节,在VC等下面int4字节)
但是由于编译器等原因,在结构类型后面还会有一些附加的数据,所以会比4(6)大

总结一下就是不一定。。。可以用sizeof(xxx)查看。

[解决办法]
这个跟内存对齐方式有关
为了让内存操作更快,cpu一般要求内存的起始地址满足一定的条件,比如为2,4,8的倍数等等

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

在内存中占几个字节?怎么计算得来的?

[解决办法]
C/C++ code
struct   xxx {     char   a, //1字节    int   b, //4字节    char   c //1字节}
[解决办法]
和编译器有关,不同的编译器int型占得字节数是不同的,char一般都是一个字节
[解决办法]
字节对齐
[解决办法]
如: 
struct xxx 

char a, 
int b, 
char c 
} ;

在vc编译器中,int占用4个字节,所以该结构体占用字节为1+4+1=6。
在tc编译器中,int占用2个字节,所以占用字节为1+2+1=4
[解决办法]
http://topic.csdn.net/u/20100108/20/83248e78-6e1f-4050-b2db-ea0c58b1a9c0.html?54997

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

看了你也不太明白,他们也不太明白。
[解决办法]
同意,跟不同的编译器有关~~

探讨
这个跟内存对齐方式有关
为了让内存操作更快,cpu一般要求内存的起始地址满足一定的条件,比如为2,4,8的倍数等等


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

在内存中占几个字节?怎么计算得来的?

[解决办法]
LS的说跟不同的编译器有关~~

不明白别乱说。跟系统还有关系呢!

现在讨论的是内存对齐的问题,这是纯理论。让你的编译器去一边玩。

你用PHP,JAVA编C/C++这个肯定跟编译器有关。

跟编译器相关已经成为了C/C++各位版主的经典语录拉。别什么都让编译器勇敢地承担好吗?

求你们了。谢谢!
[解决办法]
12,内存对齐;若果换一下顺序如:
struct xxx 

int b, 
char a, 
char c 
} 或
struct xxx 

char a, 
char c,
int b 
} 答案就是8了




[解决办法]
google 内存对齐

怎么上面一堆的答案

直接sizeof看就是了
[解决办法]
探讨

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

在vc编译器中,int占用4个字节,所以该结构体占用字节为1+4+1=6。
在tc编译器中,int占用2个字节,所以占用字节为1+2+1=4

[解决办法]
不要动不动扯到编译器好么

也不要想当然好么

那些说是4,6的, 几个开编译器跑了的?

————————————————————————————————————

数据结构有的内存对齐!!!!

typedef struct _T1 {
int a;
char b;
char c;
}T1;

typedef struct _T2 {
char a;
int b;
char c;
}T2;

你们能保证
sizeof(T1) == sizeof(T2) 
否?

看着真好笑



[解决办法]
这个和编译器还是有关系,编译器会对数据进行内存对齐,以提高代码执行效率
现在常用的编译器编出来一般是12

[解决办法]
12字节
具体原因请参考字节对齐
[解决办法]
学习!!!!!
[解决办法]
不一定,char占一个字节,但int型根据不同的编译器,结构是不同的,可能是两个或者四个,所以为1+2+1或者1+4+1
[解决办法]
c++中内存字节对齐原则:
一、在默认情况下,vc规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量存放时根据在结构体中出现的顺序依次申请空间,同事按照对齐方式调整,空缺的字节vc会自动填充。同事vc为了确保结构的大小为结构的字节边界数(即该结构中所占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
二、vc中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节就是说变量存放的起始地址的偏移量有两种情况:第一,如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认对齐方式;第二,如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构总大小必须为占用空间最大变量所占用的空间数的倍数;否则,必须为n的倍数。
[解决办法]
学习、、了,不过理论上还是4或者6个字节吧!

热点排行