空结构体(类)的大小
来源:互联网 发布:积分商城软件文档 编辑:程序博客网 时间:2024/05/20 04:10
空结构体(类)sizeof的返回值?
我首先想到的是既然结构体里面没有操作,也就是没有定义变量,那么没有占用空间,应该是0。
可是如果是0,在内存中又如何找这个结构体呢?
于是用代码试了一下
#include<iostream>using namespace std;struct A {};class B {};int main(){cout << sizeof(A) << endl;cout << sizeof(B) << endl; return 0;}运行的结果为:1
1
好奇怪!为什么没有变量还要分配空间?又为什么只分配一个空间?
由于空类仍然可以实例化,即 ClassA A; cout<<"sizeof(A): "<<sizeof(A)<<endl;
一个类能够实例化,编译器就需给它分配内存空间,来指示类实例的地址
这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)
那如果是代码这样的呢?
class B {int printf() { cout << "B"; }};int main(){cout << sizeof(A) << endl;cout << sizeof(B) << endl; return 0;}运行结果:1
对象的大小是其数据成员所占的空间只和,而函数是该类对象通用的,所以不在对象的储存空间里。
但对于虚函数就会是不一样的情况。
#include<iostream>using namespace std;class B {int printf() { cout << "B"; }};class C {virtual int printf() { cout << "C"; }};int main(){cout << sizeof(B) << endl;cout << sizeof(C) << endl; return 0;}运行结果为:1
4
这是因为C中含有虚函数,编译器就要通过vptr找到虚函数表,这样内存中就会有int类型的指针,也就是说会占有4个字节的空间。
虚继承也是如此
class B{};class B2{};class C:public B{};class D:public virtual B{};class E:public B,public B2{};sizeof(B)=1;sizeof(c)=1;sizeof(D)=4;sizeof(E)=1;
阅读全文
0 0
- 空结构体(类)的大小
- 题目:空结构体和空类的大小
- 空类和空结构体的大小
- 空类与空结构的大小
- 空类与空结构的大小
- 空类与空结构体大小
- C++中空类和空结构体大小的问题?
- 空结构体与空指针的大小
- C语言_空结构体的大小
- 空结构体sizeof()获取的大小是多少
- 空结构体(空类)的size
- 【程序设计】C与C++中空结构体与空类的大小
- 空类的大小
- 空类的大小
- 【常见面试题目C++系列】C++中空类和空结构体大小(sizeof)详谈
- 空类的大小(待续)
- 空类以及空类的大小
- 空类大小的理解
- 单例模式
- okio源码解析
- java工程师技能体系和进阶路程
- 面向对象-继承
- Git菜单栏功能
- 空结构体(类)的大小
- c语言函数如何获取传入的数组(指针)的指针所指向内容的长度
- Spark学习笔记(2)——RDD特性
- vue源码学习-vnode的挂载和更新流程
- 面试总结之谈谈你对面向对象的理解
- [leetcode] 334. Increasing Triplet Subsequence 解题报告
- Java实现CORS跨域请求
- 查看各版本代码
- Java代理模式 (静态代理,JDK动态代理,CGlib动态代理)