结构体变量空间分配问题
案例:
#include <stdio.h>
#include <stdlib.h>
struct s
{
char a[3];
char b[4];
};
int main()
{
struct s ST;
memset (&ST, 0, sizeof(ST));
printf("&ST.a=[%x]\n", &ST.a);
printf("&ST.b=[%x]\n", &ST.b);
char str[] = "1234567";
memcpy(&ST, str, sizeof(ST));
return 0;
}
问题:
1. 定义了结构体变量ST,系统是如何给他分配空间的?
2. 结构体的成员变量的地址空间是否连续的?
3. 一般情况是连续的,但是我好像记得有时候是连续的,想确定下;
4. 如果不是连续的,memcpy(&ST, str, sizeof(ST));这样赋值应该就有问题了,
还是说就算空间不是连续的,ST.a值是123,ST.b值是4567?
[解决办法]
为了对齐,会插入一些无用的空间
[解决办法]
struct s
{
char a[3];
char b[4];
};
一般会有对齐,如果是四字节对齐的话,a[3]后面会插入一个字节的无用空间,然后是b[4];
[解决办法]
将申明放在下面,可以以一字节对齐:
- C/C++ code
#pragma pack(push, 1)typedef struct _XX{...;...;}XX;