C语言类型大小总览

  • 编译器pack指令 #pragma pack(n)——定义n字节对齐
  • C++固有类型的对齐取编译器对齐与自身大小中较小的一个
  • 32位C++默认8字节对齐。gcc编译器默认4字节对齐
  • static变量在静态区,sizeof均不纳入计算
  • 在编译阶段处理,sizeof作用范围内的内容不能被编译,所以sizeof()内的运算不被执行
  • sizeof(函数)=sizeof(返回值类型)
  • sizeof和strlen:sizeof计算字符串容量,算’\0’,strlen计算字符串长度,到’\0’截止
  • 类:非static数据成员变量+虚函数指针+对齐;无论多少个虚函数,都只有一个指向虚函数表的指针(4字节)
  • 联合体:最长成员的大小对齐
  • 带位域:相邻位域字段的两个变量若类型相同,当两个字段位宽和小于此类型大小时,二者紧邻存储;若二者位宽和大于本类型大小,则第二个字段从新存储单元开始,偏移量为其类型大小整数倍。若相邻位域字段类型不同,则视编译器决定是否压缩存储,VC6不压缩,Dec-C++压缩。如果位域字段间穿插着非位域字段,不压缩。
  • 数组:数组占内存字节=元素个数*元素长度; 当数组作为函数参数传递时,蜕变成指针

32/64 位系统各类型对照表:

字节

short

int

float

long

*(地址)

double

long long

32位

2

4

4

8

8

64位

2

4

4

8

8

*有无unsigned修饰都一样

结构体大小

约定为32位系统,即char 1字节、short 2字节、int 4字节

该问题总结为两条规律:
1,每个结构体成员的起始地址为该成员大小的整数倍,即int型成员的其实地址只能为0、4、8等

2,结构体的大小为其中最大成员大小的整数倍

struct A{
char a; //
int b; //空3 + 4 = 7 (规则1)
short c; //2+空2=4 (规则2)
};
struct B{
char a; //
short b; //空1 + 2 = 3 (规则1)
int c; //
};

结果是:

sizeof(A)=
sizeof(B)=

如果指定了对齐值

#pragma pack(1)
struct A{
char a; //
int b;//
short c;//
};
#pragma pack(1)
struct B{
char a;//
short b;//
int c;//
};

结果是:

sizeof(A)=
sizeof(B)=

参考:

https://blog.csdn.net/EVEcho/article/details/81115683

https://blog.csdn.net/radianceblau/article/details/60867307

最新文章

  1. ActiveX(一)第一个简单的Demo
  2. JQuery的Ajax跨域请求的解决方案
  3. spring读写分离
  4. jquery 下了框
  5. 【原】Storm实战
  6. 检测到有潜在危险的 Request.Form
  7. (转载)PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
  8. 热修复 RocooFix篇(一)
  9. 【USACO 2.1.2】法雷序列
  10. activity的生命周期【转】
  11. Chapter 1 Securing Your Server and Network(10):使用扩展保护避免授权中继攻击
  12. js验证15位或18位身份证
  13. asp.net core 同时添加Identity和Bearer认证
  14. gitlab中批量删除本地以及远程tag的操作
  15. Linux 正则表达式_010
  16. [配置]给Myeclipse配置Tomcat
  17. 深入浅出Web开发——Fiddler
  18. 分模块开发创建service子模块——(八)
  19. 【转】使用lockbits方法处理图像
  20. Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)

热门文章

  1. Andrew Ng机器学习第五章——多变量线性回归
  2. aspectj
  3. POJ 2390
  4. 【转】linux下杀死进程(kill)的N种方法
  5. puppet的使用:puppet的hello world
  6. 删除Open with Atom右键菜单
  7. 解析ASP.NET Mvc开发之删除修改数据 分类: ASP.NET 2014-01-04 23:41 3203人阅读 评论(2) 收藏
  8. Java 生成指定范围的随机数
  9. Linux用户权限规范 /etc/sudoers文件解释
  10. centos 关闭selinux 临时关闭selinux 报错 setenforce: setenforce() failed