类的大小——sizeof 的研究】的更多相关文章

类的大小——sizeof 的研究(1) 先看一个空的类占多少空间? class Base { public: Base(); ~Base(); }; 注意到我这里显示声明了构造跟析构,但是sizeof(Base)的结果是1. 因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址.同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了.所以空类的sizeof为1. 而析构函数,跟构造函数这些成员函数,是跟s…
第一:空类的大小 class CBase { }; 运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; 输出 sizeof(CBase)=1: 为什么空的什么都没有是1呢? 先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址.同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了.所以空类的sizeof为1. 第…
用sizeof求类的大小,http://blog.csdn.net/szchtx/article/details/10254007(sizeof浅析(三)——求类的大小),这篇博文给出了非常详尽的举例介绍. 但是细心的话,你会发现一个小瑕疵,那就是对如下例子求sizeof(B),在VS下是16不是12! class A { public: int a; private: char b; }; class B : public A { public: int d; char c; }; 以下是我根…
昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. vc6/vc8 cl 和 Dev-C 的g++ 来做的测试: 上代码, 测试代码: #include <stdio.h>class A{public: int x;  int y; A() {  x = 1;     y = 2; }; void go() {  printf("A go()\n"); }    virtual void…
初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能. 首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分配一块地址. 那我们先看看一个例子: #include<iostream.h> class a {}…
关于C++中空类的大小为1,我们大家都有所了解,但是除了空类之外的其他一些没有成员变量的类的大小,还是有很多不明之处的. 我们来看如下一个例子: #include<iostream> using namespace std; class a {}; class b{}; class c :public a{ virtual void fun() = 0; }; class d :public b, public c{}; int main() { cout << "siz…
C++类的大小   一个空类class A{};的大小为什么是1,因为如果不是1,当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处,就无法区分. 单继承 #include<iostream> using namespace std; class A { public: virtual void aa(){} private: char k[3]; }; class B: public A { public: virtual voi…
(一)常规类大小计算 C++类对象计算需要考虑很多东西,如成员变量大小,内存对齐,是否有虚函数,是否有虚继承等.接下来,我将对此举例说明. 以下内存测试环境为Win7+VS2012,操作系统为32位 一.完全空类 #include <iostream> using namespace std; class A { }; class B : public A{ }; class C : public B{ }; int main() { A a; B b; C c; cout<<&q…
C++中类涉及到虚函数成员.静态成员.虚继承.多继承.空类等. 类,作为一种类型定义,是没有大小可言的. 类的大小,指的是类的对象所占的大小.因此,用sizeof对一个类型名操作,得到的是具有该类型实体的大小. 类大小的计算,遵循结构体的对齐原则: 类的大小,与普通数据成员有关,与成员函数和静态成员无关.即普通成员函数.静态成员函数.静态数据成员.静态常量数据成员,均对类的大小无影响: 虚函数对类的大小有影响,是因为虚函数表指针带来的影响: 虚继承对类的大小有影响,是因为虚基表指针带来的影响:…
C++类的大小 (i) 如下代码: #include<iostream> using namespace std; class CBase { }; class CDerive :public CBase { }; int main(int argc, char* argv[]) { CDerive p[3]; cout << "sizeof(CBase)=" << sizeof(CBase) << endl << "…