您的位置:首页 > 编程语言 > C语言/C++

c语言内存对齐

2013-03-28 21:54 351 查看
记录平常所学,以便回顾。

c语言中存在着内存对齐问题,在struct存储中尤为明显,这里先介绍一种情况,以后接着补充。

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
typedef unsigned long long int u64;
struct s1
{
u8 a;
u16 b;
u8 c;
}

struct s2
{
u8 a;
u32 b;
u8 c;
}

struct s3
{
u8 a;
u64 b;
u8 c;
}
void main()
{
printf("%d\n", sizeof(struct s1));
printf("%d\n", sizeof(struct s2));
printf("%d\n", sizeof(struct s3));
}

结果为:s1占6个字节,s2占12个字节,s3占24个字节。

内存对齐的字节数,以结构体中所占内存数最大的为准,即s1以2个字节对齐,s2以4个字节对齐,s3以8个字节对齐。

s1在内存中的存储为:



a放在0地址,因为是2字节对齐,而b占两个字节,所以放在2、3地址,c虽然占一个字节,但是5地址也是s1的空间。

s2在内存中的存储为:



a放在0地址,b占4个字节,同时s2是4字节对齐的,所以在0-3地址放不下b,将b放在下一个4个字节处,c放在8位置,虽然后面没有数据,但是仍然要占4个字节。

s3也是如此,a在0地址,b在8-15地址存储,c存在16地址,共占24个字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息