首页 技术 正文
技术 2022年11月12日
0 收藏 495 点赞 4,530 浏览 1780 个字

#pragma pack(n)重要规则:1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同;2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小化长度;规则就是每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数中较小的一个对齐(对于单个char出现时,必须为2的整数倍,比如n=2时,char 占一位,但是后面有一位空;char [2],直接存储,不空位);3,结构、联合或者类的数据成员,第一个放在偏移为0的地方;以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度两个中比较小的那个进行;也就是说,当#pragma pack指定的值等于或者超过所有数据成员长度的时候,这个指定值的大小将不产生任何效果;4,复杂类型(如结构)整体的对齐是按照结构体中长度最大的数据成员和#pragma pack指定值之间较小的那个值进行;这样在成员是复杂类型时,可以最小化长度;5,结构整体长度的计算必须取所用过的所有对齐参数的整数倍,不够补空字节;也就是取所用过的所有对齐参数中最大的那个值的整数倍,因为对齐参数都是2的n次方;这样在处理数组时可以保证每一项都边界对齐;#pragma pack(n)struct node1{int a;char b;short c;char d;}test1;sizeof(test1)n=1,大小为8, a(4)+b(1)+c(2)+d(1)n=2,大小为10, a(4)+b(2)+c(2)+d(2)n=4,大小为12, a(4)+b(2)+c(2)+d(2) struct node2{int a;char b;struct node1 c;char d;}test2;sizeof(test2)n=1,大小14, a(4)+b(1)+c(8)+d(1)n=2,大小18, a(4)+b(2)+c(10)+d(2)n=4,大小24 a(4)+b(2)+c(12)+d(2) struct node3{int a;char b[2];struct node1 c;}test3;sizeof(test3)n=1,大小14, a(4)+b(2)+c(8)n=2,大小16, a(4)+b(2)+c(10)n=4,大小20 a(4)+b(2)+c(12) union un1{char a[5];int i;}u1;sizeof(u1)n=1,大小5, a(5)n=2,大小6, a(5)n=4,大小8 a(5) struct node4{int a;char b[3];union un1 c;}test4;sizeof(test4)n=1,大小12, a(4)+b(3)+c(5)n=2,大小14, a(4)+b(4)+c(6)n=4,大小16 a(4)+b(4)+c(8)

#include<iostream>using namespace std;#pragma pack(4)struct node1{
int a;
char b;
short c;
char d;
}test1;
struct node2{
int a;
char b;
struct node1 c;
char d;
}test2;
struct node3{
int a;
char b[];
struct node1 c;
}test3;
union un1{
char a[];
int i;
}u1;
struct node4{
int a;
char b[];
union un1 c;
}test4;
int main()
{
cout << "int " << sizeof(int) << endl;
cout << "short " << sizeof(short) << endl;
cout << "char " << sizeof(char) << endl;
cout << "long " << sizeof(long) << endl;
cout << "double " << sizeof(double) << endl;
cout << "test1 "<<sizeof(test1) << endl;
cout << "test2 " << sizeof(test2) << endl;
cout << "test3 " << sizeof(test3) << endl;
cout << "u1 " << sizeof(u1) << endl;
cout << "test4 " << sizeof(test4) << endl;
system("pause");
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295