标签:ima return 位置 printf pack ret 大于 成员 访问
内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个数据单元安排在适当的位置上。
min(#pragma pack()指定的数值,当前成员的大小)
的倍数中。#pragma pack(n)
来设定变量以n字节对齐方式#include<stdio.h>
#pragma pack(4)
struct Node{
char a;
char b;
int c;
};
int main(void){
printf("%d",sizeof(struct Node));
return 0;
}
首先看规则1,成员变量a的偏移量为0,所以a占1个字节。
min(4,sizeof(char))
的值为1,所以偏移量为1的倍数,所以b也占一个字节且不补全。min(4,sizeof(int))
的值为4,所以偏移量为4的倍数,也就是说c只能从4,8,16开始放,因此在b后面要空开两个字节,再放成员变量c。sizeof(struct Node)
,还要知道min(4,sizeof(int))
的值为4,所以无需再补全。最后sizeof(struct Node)
的值就为8。
#include<stdio.h>
#pragma pack(4)
struct Node{
char a;
int c;
char b;
};
int main(void){
printf("%d",sizeof(struct Node));
return 0;
}
标签:ima return 位置 printf pack ret 大于 成员 访问
原文地址:https://www.cnblogs.com/LittleBanana/p/11936938.html