| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7616 人关注过本帖
标题:结构体所占内存计算
只看楼主 加入收藏
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:5 
根据内存对齐原理,按照结构体中最大的类型算,也就是每个都是占用4字节,
合起来就是12字节。
差不多就是这个意思,你认真看下随便一个文件的属性,它都会写着文件大小多少。。。占用空间多少。。。
这就跟内存或者硬盘中的最小存储单位有关了,可能你那台机器上的最小内存存储单位是4吧

勤能补拙,熟能生巧!
2011-01-10 00:35
aaronhexin
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:199
注 册:2010-12-6
收藏
得分:0 
对齐的规则是按照编译器指定的一个数和结构体中该数据成员长度这两个数中较小的一个进行的,
例如
struct str1{
    char ch;
    int i;
    short si;
}

第一个成员ch位于偏移为0的位置,接下来存储i,需要进行对齐,以vc为例,指定的数是8,i的数据长度为4,按照4对齐,i必须存储到首地址为4的倍数上面,需要在ch后面需要增加3个字节,然后是存储si,起始位置为8,为2的倍数,无须对齐,这时候的存储长度为4+4+2=10。
除了数据自身对齐外,整个结构体也要对齐,按照编译器指定的数和结构体中最长的数据长度这两个数中较小的进行,此例4,结构体的长度必须是4的倍数,所有需要在最后添上两个字节,变为12。
并不是简单的按照最长的那个类型算,若是这样的话,
那么struct str2 {
    char ch;
    short si;
    int i;
}应该与上面的str1长度一样,但是实际不是,str2只占8个字节。
内存对齐是为了匹配cpu的取数据周期。
以前我们老师讲的比较仔细,还记得一点
2011-01-10 05:18
快速回复:结构体所占内存计算
数据加载中...
 
   



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

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