| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 559 人关注过本帖
标题:为什么sizeof(A5)是24, 内存对齐是怎么操作的?
只看楼主 加入收藏
single581
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-9-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
为什么sizeof(A5)是24, 内存对齐是怎么操作的?
class A5
    {
    public:
        double d;   // len 8
        float  a;   // len 4
        int    b;   // len 4
        char   c;   // len 1
        
        A5();
        ~A5();
    };

对于这个类,取SIZEOF,结果是24,有人能帮忙详细解说下内存对齐的规则吗?为什么我对来对去只有20 :(
搜索更多相关主题的帖子: sizeof 内存 
2010-09-02 14:47
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:10 
肯定是你编译器不是g++

至少我的这里肯定是20.
2010-09-02 15:37
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:10 
我24

—>〉Sun〈<—
2010-09-02 20:48
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
double: 8
float: 4
int: 4
char: 1
class a5: 24  // 24
.d 0x7fff5ac9f380
.d 0x7fff5ac9f380
.f 0x7fff5ac9f388
.i 0x7fff5ac9f38c
.c 0x7fff5ac9f390


[ 本帖最后由 cosdos 于 2010-9-2 21:05 编辑 ]

—>〉Sun〈<—
2010-09-02 21:04
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/Devil/workplace/test/test

Breakpoint 1, main () at main.cpp:14
(gdb) p a
$9 = {
  d = 2.1716590483608889e-305,
  a = 4.01951477e-34,
  b = 134517456,
  c = 75 'K'
}
(gdb) p &a.d
$10 = (double *) 0xbffff6c8
(gdb) p &a.a
$11 = (float *) 0xbffff6d0
(gdb) p &a.b
$12 = (int *) 0xbffff6d4
(gdb) p &a.c
$13 = 0xbffff6d8 "K\222\005\b\364\177\256"
(gdb) s
20
(gdb) l
10   
11    int main()
12    {
13        A5 a;
14        std::cout<<sizeof(a)<<std::endl;
15        return 0;
16    }
(gdb)


check output

[ 本帖最后由 Devil_W 于 2010-9-2 21:14 编辑 ]
2010-09-02 21:13
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
结构体本生的对齐是默认结构体里面变量的最大类型,结构体8个,所以24正好能被8整除
2012-04-08 17:04
快速回复:为什么sizeof(A5)是24, 内存对齐是怎么操作的?
数据加载中...
 
   



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

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