在32位操作系统gcc编译器环境下,关于字符对齐

来源:互联网 发布:初学者视频剪辑软件 编辑:程序博客网 时间:2024/04/29 17:55

在32位操作系统gcc编译器环境下,下面程序的运行结果为

#include <iostream>using namespace std;class A {public:    int b;    char c;    virtual void print() {        cout << "this is father’s fuction! " << endl;    }};class B: A {public:    virtual void print() {        cout << "this is children’s fuction! " << endl;    }};int main(int argc, char * argv[]) {    cout << sizeof(A) << "" << sizeof(B) << endl;    return 0;}

答案:12 12
类的大小只与类的成员函数和虚函数指针大小有关。sizeof(A)的大小等于4(int)字节+4(char考虑对齐)字节+4(指向虚函数的指针)字节
sizeof(B)的大小等于 4字节(int)+4字节(char考虑对齐)+4字节(指向虚函数的指针)

为什么sizeof(B)不是加上了两个虚函数指针的大小呢?为什么不是16?

因为在基类中存在虚函数时,派生类会继承基类的虚函数。在派生类中多定义了一个基类中没有的虚函数。派生类不会再增加字节(所有的虚函数共享一块存储空间一个虚函数表)仅仅需要考虑派生类中加进来的非static数据成员的内存空间大小即可。所以B的大小也为12。

0 0
原创粉丝点击