结构类型(struct)与机器位数不同所占用的内存空间

本文通过一个具体的C语言程序示例,详细解释了在64位RHEL6平台上,结构体变量及其成员在内存中如何进行对齐。文章展示了不同情况下结构体所占内存的变化,并探讨了这种对齐方式背后的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平台:RHEL 6 64bit

例子

[clef@rhel6164 struct]$ cat ./book.c
#include <stdio.h>
#define MAXTITL 41

struct book{
    //char title[MAXTITL];
    float *p;
};

int main(void)
{
    struct book library;
    char *ptr;
    //printf("%d\n",sizeof(book)); 如果直接去统计book结构所所占用的空间,就会报(‘book’ undeclared)
    printf("strut book library: %d\n",sizeof(library));
    printf("char *ptr: %d\n",sizeof(ptr));
    return 0;
}
编译&运行

[clef@rhel6164 struct]$ gcc ./book.c
[clef@rhel6164 struct]$ ./a.out
strut book library: 8
char *ptr: 8
上面的book结构里面仅包含了一个指向float的指针( 表示一个地址),因为这里的平台是用的64bit,并且sizeof是以字节(8bit)来显示,所以这里book结构的大小显示为8字节,同样这里定义了一个指向char类型的指针,同样是因为上面的原因,结果一样是8字节.

如果把上面book结构里面的数组title定义解注释,结果将会是56字节,而不是49(41+8)字节。因为64bit平台是以8的倍数来分配内存空间的,虽然上面的title数组只有41字节,但是同样会分配48字节给数组title,这样一来一共就是56字节。

[clef@rhel6164 struct]$ cat book.c
#include <stdio.h>
#define MAXTITL 41

struct book{
    char title[MAXTITL];
    float *p;
};

int main(void)
{
    struct book library;
    char *ptr;
    //printf("%d\n",sizeof(book));
    printf("strut book library: %d\n",sizeof(library));
    printf("char *ptr: %d\n",sizeof(ptr));
    return 0;
}
[clef@rhel6164 struct]$ gcc ./book.c
[clef@rhel6164 struct]$ ./a.out
strut book library: 56
char *ptr: 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值