内存对齐
2023-02-18 16:41:55 时间
附实例
规则1
对于结构(或联合)的各个成员,第一个成员位于偏移为0,以后每个数据成员的偏移量必须是#pragma pack指定的数值和结构体(或联合)中最大数据成员长度 这2个数值中较小的一个的倍数。 使用伪代码表示: min(#pragma pack, 结构最大数据成员长度) * N
规则2
在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐也按照#pragma pack指定的数值和结构(或联合)最大数据成员长度这2个数值中较小的一个进行。
规则3
如果没有使用#pragma pack指令来显式的指定内存对齐的字节数,则按照默认字节数来对齐,各个平台的默认对齐规则如下:32位CPU默认按照4字节对齐;64位CPU默认按照8字节对齐。
struct x{
char a; //4
int i; //4
char b; //4
};
int main()
{
cout << sizeof(x); //12
}
struct x{
char a; //4
char b;
int i; //4
};
int main()
{
cout << sizeof(x); //8
}
上面两个如果在#pragma pack(8)下也是一样,因为int是4个字节,小于8,所以是4字节对齐
struct x{
long long a; //8
char b; //4
int i; //4
};
int main()
{
cout << sizeof(x); //
}
相关文章
- 轻松搭建CAS 5.x系列(4)-Java客户端程序接入CAS单点登录,Hello World版
- Java 调式、热部署、JVM 背后的支持者 Java Agent
- 深入理解Java ClassLoader及在 JavaAgent 中的应用
- Java探针技术-JVM的动态agent机制:在main函数启动之后运行agent
- Java探针技术-Instrumentation与ClassFileTransformer--字节码转换工具
- Java探针技术-instrutment中retransformClasses和redefineClasses
- Java探针技术-动态agent机制:在main函数启动之后运行agent
- Java探针技术-动态重定义Class
- Java探针技术-retransformclasses的介绍
- Java探针技术-如何从asm代码中正确使用Instrumentation.retransformClasses()
- Java-技术专区-探针技术之instrutment中retransformClasses和redefineClasses
- Jaeger-Opentracing的Java-client完整分布式追踪链
- Jaeger-Opentracing的Java-client
- Jaeger-2.客户端使用 (Java版本)
- Java-技术专区-javaAgent(插桩,attach)
- Java-技术专区-设计模式-reactor模式
- Java-技术专区-如何监控Java线程池的状态
- 软硬件融合技术内幕 进阶篇 (2) —— 共产主义的幽灵
- 《Java 数据结构与算法》第1章:链表
- hive 分区表添加字段后,字段结果为null