大家一定对c语言结构体sizeof()有疑问吧。
比如
struct s{
int x;
double s1;
char z;
};
int main(int argc, char** argv) {
printf("%d",sizeof(s));
return 0;
}
这里面输出的结构体大小是多少呢?
这里就存在结构体对齐问题
我电脑下默认对齐值8
int 4字节
char 1字节
double 8字节
int 对齐为8字节
char 对齐为8字节
所以=24字节
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#pragma pack(2)
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct s{
int x;
double s1;
char z;
};
int main(int argc, char** argv) {
printf("%d",sizeof(s));
return 0;
}
这样答案就变成了14字节
#pragma pack(2)可以变更系统对齐值
附上
16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节