C++类大小
对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出现虚函数的类,该类大小为虚表指针大小4个字节(32位系统)。如出现继承,情况又不一样,不同编译器有不同的处理方法,可通过下面代码进行测试:
#include <iostream>
using namespace std;
class X {};
class Y:public virtual X {};
class Z:public virtual X {};
class A:public Y,Z {};
class C:public X{};
class D:public X{};
class E:public C,D {};
typedef float usize;
int x = 5;
class B {
public:
typedef unsigned long usize;
B(usize v):value(v),x(0.0f) {}
float X() const {return x;}
private:
//typedef unsigned long usize;
usize value;
float x;
};
int main(int argc, char *argv[]) {
B b(10);
cout << "X:" << sizeof(X) << endl;
cout << "Y:" << sizeof(Y) << endl;
cout << "Z:" << sizeof(Z) << endl;
cout << "A:" << sizeof(A) << endl;
cout << "E:" << sizeof(E) << endl;
cout << "b:" << b.X() << endl;
return 0;
}
在gcc4.7中结果如下:
test_size
X:1
Y:4
Z:4
A:8
E:2
b:0
VS2013上运行结果如下:
test_size
X:1
Y:4
Z:4
A:8
E:1
b:0
在函数声明时,编译器会对函数中参数类型进行验证,当前后类型不一致时(如上面实例中的usize,函数定义前后类型不一致),系统会报错,解决办法为函数前面定义。
C++类大小的更多相关文章
- c++类大小问题
1.空类 class A { }; 解析:类的实例化就是为每个实例在内存中分配一块地址:每个类在内存中都有唯一的标识,因此空类被实例化时,编译器会隐含地为其添加一个字节,以作区分. 2.虚函数类 cl ...
- C++类大小的计算
这里记录一下怎么计算类对象的大小. 大概总结下,类的大小需要考虑以下内容: 非静态成员变量大小 数据对齐到多少位 有无虚函数(即需不需要指向虚函数表的指针,如果考虑继承的情况,则还需要看继承了多少个指 ...
- 【整理】C++虚函数及其继承、虚继承类大小
参考文章: http://blog.chinaunix.net/uid-25132162-id-1564955.html http://blog.csdn.net/haoel/article/deta ...
- sizeof操作符-结构体与类大小
导读 sizeof是C/C++一个难点,当在自定义类上应用sizeof操作符时,总会出现意想不到的结果,下面,我们就来探讨一下sizeof这个操作符! 目录 1. sizeof与strlen的区别 2 ...
- C++空类大小
class a {};class b{};class c:public a{ virtual void fun()=0;};class d:public b,public c{}; 类a,b明明是空类 ...
- C++的类大小
有以下C++类 #pragma pack(push) #pragma pack(1) class task /*:public OSThread*/{ //public: // void Entry( ...
- 由于jsp include 很多文件后导致java类大小超过65535 bytes 的解决方法(转载)
昨天,我遇到了一個讓我很頭疼的問題. 我做了一個共通的jsp,單只測它是ok的,可是,放在別的jsp中include它,就會報錯如標題所示:The code of method _jspService ...
- 类的大小——sizeof 的研究
类的大小——sizeof 的研究(1) 先看一个空的类占多少空间? class Base { public: Base(); ~Base(); }; 注意到我这里显示声明了构造跟析构,但是sizeof ...
- C++类对象大小的计算
(一)常规类大小计算 C++类对象计算需要考虑很多东西,如成员变量大小,内存对齐,是否有虚函数,是否有虚继承等.接下来,我将对此举例说明. 以下内存测试环境为Win7+VS2012,操作系统为32位 ...
随机推荐
- 【软件】【diamond】-管脚分配
未用到的引脚设置,浮空引脚设置.可以设置浮空电压
- 手机升级到iOS10,用Xcode7.3进行真机调试方法
今天发布的正式版的iOS10,手机果断升级了,结果发现Xcode7.3不能真机调试了,原因是Xcode7.3里面没有iOS10的sdk,下面这个压缩包你可以下载下来放在你的Xcode7.3里面,当然了 ...
- 关于Xcode6创建的工程在Xcode5打开
Xcode6创建的工程在Xcode5打开- 4.0只显示3.5大小的问题 只需要在工程里添加Default-568h@2x.png,即可以解决
- 点击document隐藏某个div
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Raspberry Pi Resources-Using the UART
参考:RPi Serial Connection 本文来自:http://www.raspberry-projects.com/pi/programming-in-c/uart-serial-port ...
- js2
1.JS的三种输出方式: alert("");console.log("");document.write(""); 2.流程控制语句: a ...
- 第五篇.Bootstrap 排版
使用bootstrap的排版特性可以创建标题,段落,列表及其它内联元素. 标题:bootstrap中定义了从h1-h6的六种标题样式. 内联子标题: 如果需要向任意一个标题添加一个子标题,只需要加上& ...
- ANDROID : java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String in android
Andriod系统包中现在已经自带加密函数,如果用apache的codec包则会报以上错误,用android.util.Base64以下方法代替org.apache.commons.codec.bin ...
- HTML DOM
1.DOM方法 常用 getElementById() 返回带有指定 ID 的元素 getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组) ge ...
- eclipse中添加python开发环境
由于自己一直使用的是eclipse这个IDE,在写spark,java等都是用它,主要是用它比较顺手,也并不是觉得它有什么特别好的之处.下面主要介绍一下,在window系统下,eclipse中搭建py ...