【c++】sizeof(a struct)

空结构体的大小为多少?

int main(){
    typedef struct{
    }s;
    cout<<sizeof(s)<<endl;
    return 0;
}

输出为: 1
说明:本该是0,但是我们在什么结构实体的时候它必须在内存中占用一定空间,否则无法使用,至于具体占用多少,由编译器决定,在vs中为1(来自《剑指offer》)

结构体中加上构造函数和其他函数之后大小:

int main(){
    typedef struct stu{
        stu(){
            cout<<"this is a constructor function."<<endl;
        }
        int test(){
            cout<<"this is a function."<<endl;
        }
    }s;
    cout<<sizeof(s)<<endl;
    return 0;
} 

输出是: 1
说明:调用函数只需知道函数地址,而函数地址只与类型有关,与类型实例无关,也就是地址只存在于类型中,实例中没有这个函数地址。所以实例中并没有加入任何东西,所以还是1。

将一个普通函数改为虚成员函数之后结构体大小:

int main(){
    typedef struct stu{
        stu(){
            cout<<"this is a constructor function."<<endl;
        }
        virtual int test(){
            cout<<"this is a function."<<endl;
        }
    }s;
    cout<<sizeof(s)<<endl;
    return 0;
} 

输出为: 8
说明:实例中多了一个指向虚函数表的指针,64位机上位8字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值