结构体定义及结构体粒度(alignment)
结构体定义及结构体粒度(alignment)
#pragma pack(1)
typedef struct _STUDENT_INFORMATION_
{
	int Age;
	char v1;
	int v3;
	char v2;
}STUDENT_INFORMATION;
结构体的成员对齐值:
- 结构体中当前数据成员类型的长度为M,指定的对齐值为N,实际对齐值为q = min(M, N)
 - 结构体中的数据成员,除了第一个是始终放在最开始的地方,其它数据成员的地址必须是它本身大小或对齐参数两者中较小的一个的倍数
 
对齐值对结构体整体大小的影响:
- 如果结构体中的数据成员类型最大值为M,指定的对齐值为N,实际对齐值就是min(M, N)
 - 结构体大小必须能被对齐值整除
 
注意:
1)当结构体中以数组作为成员时,计算对齐值是根据数组元素的长度,而不是数组的整体大小
2)当结构体中出现结构体类型的数据成员时,不会将嵌套的结构体类型的整体长度加入对齐值计算中,而是以嵌套定义的结构体使用的对齐值进行对齐
额外知识点:
pragma pack(1)意为按一个字节对齐
pragma pack()即取消自定义对齐方式
若前面没有pragma pack 结构体里面内容定义应按字节数从大到小或从小到大
结构体定义及结构体粒度(alignment)的更多相关文章
- go 结构体定义和结构体指针
		
结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...
 - C语言、结构体 定义
		
C语言允许用户自己建立由 不同类型数据组成的组合型数据结构 成为结构体. struct Student { int num; //学号 ]; //姓名为字符串 char sex; //性别为字符型 i ...
 - 结构体定义 typedef struct 用法详解和用法小结
		
typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,stru ...
 - ARM单片机的头文件如何用结构体定义地址
		
下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...
 - Swift类和结构体定义-备
		
Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...
 - 指针直接赋值为整型AND利用宏定义求结构体成员偏移量
		
首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数; 除外,该语句表示指针为空): 所以 ; 这样的代码是不允许的. ...
 - C#中结构体定义并转换字节数组
		
最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...
 - C语言结构体定义的几种方法
		
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
 - c语言结构体定义的几种形式
		
转自https://blog.csdn.net/ziguo2010/article/details/79897327 1.最常用定义方式:定义结构体data,此时结构体相当于一个类型,比如int,如需 ...
 - 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
		
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
 
随机推荐
- 火山引擎DataTester:AB实验平台未来演进趋势是怎样的?
			
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,DataFun联合行行AI举办第四届"数据智能创新与实践人工智能大会,火山引擎DataTester ...
 - MySQL 数据库中的数据类型
			
整数类型 标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩展支持了 TINYINT.MEDIUMINT 和 BIGINT 整数类型 ...
 - Apollo系列之架构设计(一)
			
原创文章,转载请标注.https:https://www.cnblogs.com/boycelee/p/17967590 目录 一.什么是配置中心? 二.传统配置有什么问题? 三.配置中心的场景 四. ...
 - ElasticSearch 分组聚合统计
			
统计总数: GET mytest-statistics/_search { "size": 0, "query": { "bool": { ...
 - Cursor,程序员的 AI 代码编辑助手
			
相信大家都或多或少地听说过.了解过 chatGPT ,半个月前发布的 GPT-4 ,可谓是 AI 赛道上的一个王炸 那么今天咸鱼给大家分享一个开源的 AI 代码编辑器--Cursor,让各位程序员在编 ...
 - IDEA整合SSM框架:简易图书操作模块
			
这个SSM整合文章,以图书的增删改查为例 本篇文章源码已上传: Github:https://github.com/RivTian/University-coursework/tree/master/ ...
 - element-ui实现部分引用
			
1.首先安装 babel-plugin-component组件: 2.修改babel.js配置 1 module.exports = { 2 presets: [ 3 '@vue/app', 4 [' ...
 - 写了个移动端可滑动(惯性滑动&回弹)Vue导航栏组件 ly-tab
			
https://www.imooc.com/article/23768?block_id=tuijian_wz https://blog.csdn.net/weixin_44614772/articl ...
 - Qt开发-共享内存使用范例,配合开发者密钥使用后台调试程序或者进入调试模式
			
共享内存 就之前不是开发了一个Leventure_DeveloperKey用以调试程序嘛,在这里简单聊一下调试模式的方案. 这里的调试分为了两种,一种是调试模式,一种是开发者模式.需要这两种模式的原因 ...
 - java进阶(9)--数组
			
一.基本概念: 1.数字为引用数据类型 2.数组实际上是一个容器,可以同时容纳多个元素 3.数组可存储基本数据类型,也可以存储引用数据类型的数据 4.数组一旦创建.长度不可变.且数组中元素类型必须统一 ...