C语言各类型大小,结构体大小 sizeof(struct A)
2024-10-11 07:00:32
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
最新文章
- ActiveX(一)第一个简单的Demo
- JQuery的Ajax跨域请求的解决方案
- spring读写分离
- jquery 下了框
- 【原】Storm实战
- 检测到有潜在危险的 Request.Form
- (转载)PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
- 热修复 RocooFix篇(一)
- 【USACO 2.1.2】法雷序列
- activity的生命周期【转】
- Chapter 1 Securing Your Server and Network(10):使用扩展保护避免授权中继攻击
- js验证15位或18位身份证
- asp.net core 同时添加Identity和Bearer认证
- gitlab中批量删除本地以及远程tag的操作
- Linux 正则表达式_010
- [配置]给Myeclipse配置Tomcat
- 深入浅出Web开发——Fiddler
- 分模块开发创建service子模块——(八)
- 【转】使用lockbits方法处理图像
- Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
热门文章
- Andrew Ng机器学习第五章——多变量线性回归
- aspectj
- POJ 2390
- 【转】linux下杀死进程(kill)的N种方法
- puppet的使用:puppet的hello world
- 删除Open with Atom右键菜单
- 解析ASP.NET Mvc开发之删除修改数据 分类: ASP.NET 2014-01-04 23:41 3203人阅读 评论(2) 收藏
- Java 生成指定范围的随机数
- Linux用户权限规范 /etc/sudoers文件解释
- centos 关闭selinux 临时关闭selinux 报错 setenforce: setenforce() failed