| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:请教一个关于类内存分配大小的问题,如下代码
只看楼主 加入收藏
wenxinwukui
Rank: 1
等 级:新手上路
帖 子:22
专家分:6
注 册:2010-11-15
收藏
 问题点数:0 回复次数:2 
请教一个关于类内存分配大小的问题,如下代码
#include<iostream>
using namespace std;

class A{
};

class B{
    char c;
};

class C{
    int a;
    char c;
};

class D{
    int a;
};

int main(){
    cout << sizeof(A) << "," << sizeof(B) << "," << sizeof(C) << "," << sizeof(D) << endl;
}

输入结果是:1,1,8,4

---------------------------------------------------------------------------------------------------
如上面请教一下一个char在一个类中到底占几个字节?
如果看类B,则占一个字节,但是如果看C和D,一个char又占4个字节,谁能解释一下怎么回事?谢谢。
搜索更多相关主题的帖子: include 
2011-02-24 15:13
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
这个问题的关键在于一个计算机原理的概念:地址对齐方式。你能问这个问题,猜想你的计算机原理的基础较弱,因此,不进行非常严格的说明,不然你很难懂。下面我尽量浅显的说明一下(老鸟们请原谅我在下面问题描述时的不严格和不完善):
char类型的长度一直是1B,这点毋庸置疑。只是,对系统而言,在分配内存空间的时候,有一种原则:每个变量的空间不一定总是连续地顺延上一个变量所分配的空间。某些系统规定,变量的首地址(字节编号)必须总是4的倍数,那么,由int a;和char c;为成员所组成的结构体中,char c虽然只占1B,但给这个变量分配的空间还会有另外的3B,这样,后面再定义其它变量的时候,后来定义的变量的首地址就总是4的倍数了。这就是为什么sizeof(C)的运算结果是8B的原因了。
注意,那3B基本上是用不上的(没法用,当然除非用别的手段,这就不在此讨论了)。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 15:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
基本就是 2楼 说的。主要是对齐问题导致的。
楼主如果是新手的话不用太在意这个问题。知道有时给一个对象分配的空间可能会大于对象本身的大小就行了。将来学计算机组成原理之类的会有这方面的知识。
2011-02-24 16:16
快速回复:请教一个关于类内存分配大小的问题,如下代码
数据加载中...
 
   



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

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