注册 登录
编程论坛 C++教室

请教一个关于类内存分配大小的问题,如下代码

wenxinwukui 发布于 2011-02-24 15:13, 568 次点击
#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个字节,谁能解释一下怎么回事?谢谢。
2 回复
#2
犬虫门心2011-02-24 15:35
这个问题的关键在于一个计算机原理的概念:地址对齐方式。你能问这个问题,猜想你的计算机原理的基础较弱,因此,不进行非常严格的说明,不然你很难懂。下面我尽量浅显的说明一下(老鸟们请原谅我在下面问题描述时的不严格和不完善):
char类型的长度一直是1B,这点毋庸置疑。只是,对系统而言,在分配内存空间的时候,有一种原则:每个变量的空间不一定总是连续地顺延上一个变量所分配的空间。某些系统规定,变量的首地址(字节编号)必须总是4的倍数,那么,由int a;和char c;为成员所组成的结构体中,char c虽然只占1B,但给这个变量分配的空间还会有另外的3B,这样,后面再定义其它变量的时候,后来定义的变量的首地址就总是4的倍数了。这就是为什么sizeof(C)的运算结果是8B的原因了。
注意,那3B基本上是用不上的(没法用,当然除非用别的手段,这就不在此讨论了)。
#3
pangding2011-02-24 16:16
基本就是 2楼 说的。主要是对齐问题导致的。
楼主如果是新手的话不用太在意这个问题。知道有时给一个对象分配的空间可能会大于对象本身的大小就行了。将来学计算机组成原理之类的会有这方面的知识。
1