Linux C字节

Linux C字节

1、单位换算
1字节(Byte)= 8比特位(bit)
例如:Linux C 数据类型int:占4字节(4*8=32位)如果无符号表示最大的数是(232 -1 = 4294967295)
1 KB = 1024(210)B
1 MB = 1024 KB
1 GB = 1024MB

2、Linux C 各数据类型占字节大小

数据类型32位编译64位编译
char11
short22
int44
unsigned int44
float44
double88
long48
unsigned long48
longlong88
*指针48

3、机构体所占的字节数

规则:(1)结构体每一个成员相对于结构体首地址的偏移量是该成员的整数倍;
(2)结构体变量所占空间大小是对其参数的整数倍(通常对齐参数根据32位机和64位机,最大分别为4字节对齐和8字节对齐。对齐参数为结构体中成员数据类型最大的那一个)
综上:每一个成员首地址偏移量必须能整除该元素的长度
整个结构体的长度必须能整除最大成员的字节数

例如:64位编译器

struct Element_ST{
	short ele1;
	char ele2[15];
	char * ele3;
	long ele4;
	int ele5;
	short ele6;
	char ele7;
	int ele8;
	char ele9;	
};
void main()
{
	printf("size is %d\n", sizeof(struct Element_ST));
}

分析:
1、64位编译器最大对齐参数是8,结构体中有指针类型、long型所以对齐参数就是8字节
2、开始按照顺序分配内存
short ele1; 2字节
char ele2[15]; 15字节
char * ele3; 指针8字节,根据对齐规则1,所以要重新开始8字节对齐
long ele4; 8字节
int ele5; 4字节
short ele6; 2字节
char ele7; 1字节
int ele8; int 4字节,根据对齐规则1,所以要重新对其4个字
char ele9; 1字节,根据对齐规则2,结构体是对其参数的整数倍,所以后面
3字节也会被占据
在这里插入图片描述
综上:7 * 8 =56字节,程序测试结果确实是56

[root@localhost home]# gcc -g -o client ClientM.c
[root@localhost home]# ./client
size is 56
[root@localhost home]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值