结构体大小计算以及sizeof与strlen的区别
计算 区别 以及 结构 大小 sizeof strlen
2023-09-11 14:16:29 时间
内存对齐这个知识点面试问的几率特别高,赶紧学一下吧,书到用时方恨少!!!
一、结构体求大小
这里主要还是联合体求大小,应为结构体大小在前面已经记录过了,本质还是内存对齐。
联合体如何求占用内存大小:
1.找到占用字节最多的成员;
2.union的字节数必须是占用字节最多的成员的字节的倍数,而且需要能够容纳其他的成员。
typedef union {
long i;
int k[5];
char c;
}D
其中占用字节最大的数据类型是long,但是这里还有整型的数组,所以肯定不是8字节。因为字节数必须是占用字节最多的成员的字节的倍数,而且需要能够容纳其他的成员。
所以结果要是8的倍数,还要容纳这个数组的大小,数组大小是20,还要8的倍数,那就是24,所以union的大小就是24字节。
再看看结构体包含结构体或者数组的情况:
struct s4{undefined
char ch;
int i;
struct s{undefined
char ch1;
int j;
};
float f;
};
最大数据类型为4,结构体中的数据要拆开看,数据对齐后结果是20字节。
特殊情况:对齐值大于最大类型成员值
#pragma pack(10)
struct s7{undefined
char ch;
int i;
float f;
double d;
};
我们指定的对齐值是10,最大为8,是否就向10对齐?不是,当指定对齐值大于自身对齐值时,向自身对其值对齐,大小是24。
二、sizeof与strlen的区别
1、性质:首先sizeof是个运算符,而strlen是一个函数。
2、功能:sizeof返回这个数据类型占用字节的大小,而strlen只是返回字符串的长度。
3、使用strlen的时候必须包含他的头文件。
4、sizeof是在编译的时候就将结果计算出来了是类型所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小。而strlen是在运行的时候才开始计算结果,这是计算的结果不再是类型所占内存的大小,数组名就退化为指针了。
相关文章
- Java实现 蓝桥杯 算法训练 天数计算
- 【阿里巴巴大数据实践笔记】第13章:计算管理
- 用Python计算三角函数之acos()方法的使用
- Open3D(C++) 计算点云凸包的体积和表面积
- Open3D(C++) 计算三角形的有向面积
- paip.云计算以及分布式计算的区别
- 【无人机路径规划】基于深度强化学习的多无人机辅助边缘计算网络路径规划(Matlab代码实现)
- 一次性计算多个时间序列的标量时间序列分析度量研究(Mtlab代码实现)
- BZOJ 2338 HNOI2011 数矩形 计算几何
- NLP模型笔记2022-32:Sentence-BERT句子语义相似计算与相似句子聚类
- TinyML:下一轮人工智能革命——看来边缘计算 AI模型小型化也是一大领域
- Java8中计算时间的四种方式及区别Period、Duration、ChronoUnit、Until & 时间区间Duration的简单使用
- Linux云计算-07_Linux文件服务器之vsftpd服务器