C++类的大小计算】的更多相关文章

C++中类涉及到虚函数成员.静态成员.虚继承.多继承.空类等. 类,作为一种类型定义,是没有大小可言的. 类的大小,指的是类的对象所占的大小.因此,用sizeof对一个类型名操作,得到的是具有该类型实体的大小. 类大小的计算,遵循结构体的对齐原则: 类的大小,与普通数据成员有关,与成员函数和静态成员无关.即普通成员函数.静态成员函数.静态数据成员.静态常量数据成员,均对类的大小无影响: 虚函数对类的大小有影响,是因为虚函数表指针带来的影响: 虚继承对类的大小有影响,是因为虚基表指针带来的影响:…
转自http://www.tuicool.com/articles/uiUJry 一个空的class在内存中多少字节?如果加入一个成员函数后是多大?这个成员函数存储在内存中什么部分? 一个Class对象需要占用多大的内存空间.最权威的结论是:     *非静态成员变量总合.     *加上编译器为了CPU计算,作出的数据对齐处理.     *加上为了支持虚函数,产生的额外负担. 介绍完了理论知识后,再看看再找一个例子看看(注:一下所有结果都是在VC6.0 开发环境中得出的结论) 一.空类的Siz…
C++类所占内存大小计算 说明:笔者的操作系统是32位的. class A {}; sizeof( A ) = ? sizeof( A ) = 1明明是空类,为什么编译器说它是1呢? 空类同样可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以sizeof( A )的大小为1. class B { public:   B() {}   ~B() {}   void MemberFuncTe…
(一)常规类大小计算 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…
昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. 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…
用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; }; 以下是我根…
1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): 对象头又可以分为两部分: 第一部分用来存储对象自身的运行时基本数据信息.如哈希码.GC分代年龄.锁状态标示.线程持有的锁等.这部分数据的长度在32bit和64bit虚拟机上分别为32bit和64bit.官方称呼是"Mark Word". 第二部分是类型指针,或者说指向类的元数据信息的引用.…
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 << "…
//Math类的数学计算功能 public class MathTest { public static void main(String[] args) { /*----------下面是三角运算----------*/ //将弧度转换成角度 System.out.println("Math.toDegrees(1.57):" + Math.toDegrees(1.57)); //将角度转换为弧度 System.out.println("Math.toRadians(90)…
类的大小——sizeof 的研究(1) 先看一个空的类占多少空间? class Base { public: Base(); ~Base(); }; 注意到我这里显示声明了构造跟析构,但是sizeof(Base)的结果是1. 因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址.同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了.所以空类的sizeof为1. 而析构函数,跟构造函数这些成员函数,是跟s…