uint8 a,b,c,d;
;
shi是每个变量占32位空间,还是占8个,如果是后者,那如何寻址,
另外,这是否跟系统和编译器有关?
12 个解决方案
#1
这和编译器有关,属于内存字节对齐问题
但可以自己设置
#pragma pack(1) //就占1个字节
#pragma pack(4) //就占4个字节
但可以自己设置
#pragma pack(1) //就占1个字节
#pragma pack(4) //就占4个字节
#2
连续定义的会独占或2或3或4个占32位,
现在一般的寻址单位都是4字节的.
现在一般的寻址单位都是4字节的.
#3
a,b,c,c各占一个byte,就相当于连续定义了四个unsigned char类型的变量。
上面说的什么字节对齐,应该适用于结构体内的定义,这儿还是不需要字节对齐的。
上面说的什么字节对齐,应该适用于结构体内的定义,这儿还是不需要字节对齐的。
#4
在32位平台上定义的8位变量,
变量访问时只使用1个字节,
但是这个变量却要浪费4个字节,
就是说后面的3个字节不用,浪费了。
变量访问时只使用1个字节,
但是这个变量却要浪费4个字节,
就是说后面的3个字节不用,浪费了。
#5
直接寻址方式
#6
uint8 a,b,c,d; //每个都只占一字节,合起来正好一个32位字.
有些情况,考虑到对齐问题,会浪费一些字节.
如:
uint8 a;
int b;
这样a还是占用1字节,但是接下来3个字节被空出不用,因为b是4字节对齐方式.
即: a*** b
有些情况,考虑到对齐问题,会浪费一些字节.
如:
uint8 a;
int b;
这样a还是占用1字节,但是接下来3个字节被空出不用,因为b是4字节对齐方式.
即: a*** b
#7
不好意思,弄错了,每个uint8变量占8位,但是紧接着的3字节不可用,相当于耗费了32位.
#8
大家的意思是一般情况每个8位变量占32位存储空间,浪费3个8位空间,
#9
楼上的各位仁兄,按照你们的思路,你是否可以告诉我下面的程序输出什么:
char a, b, c;
int d, e, f;
int main(){
printf("%d---%d\n", ((int)&b-(int)&a), ((int)&c-(int)&b));
printf("%d---%d\n", ((int)&e-(int)&d), ((int)&f-(int)&e));
system("pause");
return 0;
}
char a, b, c;
int d, e, f;
int main(){
printf("%d---%d\n", ((int)&b-(int)&a), ((int)&c-(int)&b));
printf("%d---%d\n", ((int)&e-(int)&d), ((int)&f-(int)&e));
system("pause");
return 0;
}
#10
to:Rudy_zhuang(风筝)
我在VC6.0中试了一下,结果是:
1---1
4---4
我在VC6.0中试了一下,结果是:
1---1
4---4
#11
存储方式是否跟系统和编译环境有关
#12
存储方式是否跟系统和编译环境有关?
这句话本身是对的。
但是你的例子显然和这个主题有点偏差。如果是定义结构体,我想会比较明显。
如:
typedef struct
{
char a;
int b;
}test_type;
这句话本身是对的。
但是你的例子显然和这个主题有点偏差。如果是定义结构体,我想会比较明显。
如:
typedef struct
{
char a;
int b;
}test_type;
#1
这和编译器有关,属于内存字节对齐问题
但可以自己设置
#pragma pack(1) //就占1个字节
#pragma pack(4) //就占4个字节
但可以自己设置
#pragma pack(1) //就占1个字节
#pragma pack(4) //就占4个字节
#2
连续定义的会独占或2或3或4个占32位,
现在一般的寻址单位都是4字节的.
现在一般的寻址单位都是4字节的.
#3
a,b,c,c各占一个byte,就相当于连续定义了四个unsigned char类型的变量。
上面说的什么字节对齐,应该适用于结构体内的定义,这儿还是不需要字节对齐的。
上面说的什么字节对齐,应该适用于结构体内的定义,这儿还是不需要字节对齐的。
#4
在32位平台上定义的8位变量,
变量访问时只使用1个字节,
但是这个变量却要浪费4个字节,
就是说后面的3个字节不用,浪费了。
变量访问时只使用1个字节,
但是这个变量却要浪费4个字节,
就是说后面的3个字节不用,浪费了。
#5
直接寻址方式
#6
uint8 a,b,c,d; //每个都只占一字节,合起来正好一个32位字.
有些情况,考虑到对齐问题,会浪费一些字节.
如:
uint8 a;
int b;
这样a还是占用1字节,但是接下来3个字节被空出不用,因为b是4字节对齐方式.
即: a*** b
有些情况,考虑到对齐问题,会浪费一些字节.
如:
uint8 a;
int b;
这样a还是占用1字节,但是接下来3个字节被空出不用,因为b是4字节对齐方式.
即: a*** b
#7
不好意思,弄错了,每个uint8变量占8位,但是紧接着的3字节不可用,相当于耗费了32位.
#8
大家的意思是一般情况每个8位变量占32位存储空间,浪费3个8位空间,
#9
楼上的各位仁兄,按照你们的思路,你是否可以告诉我下面的程序输出什么:
char a, b, c;
int d, e, f;
int main(){
printf("%d---%d\n", ((int)&b-(int)&a), ((int)&c-(int)&b));
printf("%d---%d\n", ((int)&e-(int)&d), ((int)&f-(int)&e));
system("pause");
return 0;
}
char a, b, c;
int d, e, f;
int main(){
printf("%d---%d\n", ((int)&b-(int)&a), ((int)&c-(int)&b));
printf("%d---%d\n", ((int)&e-(int)&d), ((int)&f-(int)&e));
system("pause");
return 0;
}
#10
to:Rudy_zhuang(风筝)
我在VC6.0中试了一下,结果是:
1---1
4---4
我在VC6.0中试了一下,结果是:
1---1
4---4
#11
存储方式是否跟系统和编译环境有关
#12
存储方式是否跟系统和编译环境有关?
这句话本身是对的。
但是你的例子显然和这个主题有点偏差。如果是定义结构体,我想会比较明显。
如:
typedef struct
{
char a;
int b;
}test_type;
这句话本身是对的。
但是你的例子显然和这个主题有点偏差。如果是定义结构体,我想会比较明显。
如:
typedef struct
{
char a;
int b;
}test_type;