| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1456 人关注过本帖
标题:请教有关结构体所占字节数的问题。
只看楼主 加入收藏
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:2 
请教有关结构体所占字节数的问题。
  最近碰到这么一个问题,查询了一下资料,得知:32位和64的环境下数据类型所占字节数不相同,所以这里我们仅讨论64位的情况。
进入正题:

程序代码:
#include<stdio.h>
struct
{
    int a[1];
    float b;
    double c;
}std;
int main()
{
    printf("%d",sizeof(std));
    return 0;
}


编写了一段简单的测试代码,得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

为了进一步测试,所以更改结构体std的成员变量数组a[1]为a[2],如下

    int a[2];


得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


再次修改,将 int a[2] 改成 int a[3],得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


多次修改,将int a[3] 改成 int a[4],得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


最后得出测试结果,已知,64位环境下,float 占用4字节,double占用8字节,
所以:
    当int a[1]时,得出结果:4字节+4字节+8字节=16字节
    当int a[2]时,得出结果:4字节*?+4字节+8字节=24字节
    当int a[3]时,得出结果:4字节*?+4字节+8字节=24字节
    当int a[4]时,得出结果:4字节*?+4字节+8字节=32字节
    当int a[5]时,得出结果:4字节*?+4字节+8字节=32字节
    当int a[6]时,得出结果:4字节*?+4字节+8字节=40字节
    当int a[7]时,得出结果:4字节*?+4字节+8字节=40字节

以此类推,从int a[2]开始,每加两个数组下标每增加2(等同于每增加两个数组元素),字节增加8。
疑惑:为什么数组在增加一个数组元素时,就已经多占用了8字节呢,虽然再增加一个数组元素时,所占字节数不变。请问究竟是该如何计算呢?


[此贴子已经被作者于2019-4-11 01:31编辑过]

搜索更多相关主题的帖子: 结构体 字节 int 结果 增加 
2019-04-11 01:27
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:10 
可以这样理解,64位就是8个字节,也就是说,64位系统分配内存是以8个字节为一个单位进行分配的。编程时,让系统去推算所用字节,不要人工推算
2019-04-11 02:19
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
字节对齐问题,试试:
#pragma pack (1) //指定按1字节对齐
struct
{
    int a[1];
    float b;
    double c;
}std;
#pragma pack () //取消指定对齐
2019-04-11 04:39
快速回复:请教有关结构体所占字节数的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016025 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved