有以下C++类

#pragma pack(push)
#pragma pack(1)
class task /*:public OSThread*/{
//public:
// void Entry();
//private:
// int a;
// int b;
};
#pragma pack(pop)

sizeof(task) =1 去掉一字节对齐,sizeof(task)=1 ,所以说即使是一个空的类也会占用一个1字节,也必须占,如果不存在内存,那么这类就不存在了,也就无法实例化这个类了。

添加一个成员变量 sizeof的值

class task /*:public OSThread*/{
//public:
// void Entry();
//private:
int a;
// int b;
};
sizeof(task) =

占用4个字节,int占用4个字节,并不是4+1字节,理解:类必须存在内存中,而int a占用的地址足以表达类存放的地址(验证),所以表示1个字节的已经被优化掉,不需要!

其实该类的首地址就是int a地址了。

//验证
task* t;
t= new task();
t->a = ; std::cout<< std::hex << t << std::endl;
std::cout<< std::hex << &(t->a) << std::endl;
//两个输出相同的

推广一下到类的成员方法

class task/*:public OSThread*/{
public:
task(){};
// void Entry();
void my_test(void){
std::cout<< a <<std::endl;
}
//private:
int a;
int b; // int b;
};
typedef void (task::*func)(void); //类成员函数指针
typedef void (*func1)(void); //普通函数指针 long l_func_addr;
void* funcAddr;
func t_func;
task* t;
t= new task();
t->a = ;
t_func = &task::my_test; //类方法地址
funcAddr = (void*&)(t_func); //强制转换
func1 func= reinterpret_cast<func1>(funcAddr); //强制转换
func(); //输出 3
l_func_addr = (long)func;
//输出类方法的地址,可见类方法的地址并不会成为类的首地址,类的方法地址是动态分配
std::cout<<std::hex << l_func_addr<< std::endl;
std::cout<<std::hex<<t_func<<std::endl;
//printf可以输出地址和 l_func_addr一样
printf("0x%x\n",t_func); //
l_func_addr = (long)t;
std::cout<< std::hex << l_func_addr << std::endl;
(t->*t_func)();
std::cout<< std::hex << l_func_addr << std::endl;
//t的值和&(t->a)值一致,&(t->a) 与&(t->b)相差4个byte!
std::cout<< std::hex << t << std::endl;
std::cout<< std::hex << &(t->a) << std::endl;
std::cout<< std::hex << &(t->b) << std::endl;

总结:空类必然占用1byte的空间(标识类,类地址),类方法成员不在sizeof(类名)的计算内。类的成员变量会在sizeof在内,static修饰的也不在sizeof范围内。

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

  1. C++类大小

    对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出 ...

  2. c++类大小问题

    1.空类 class A { }; 解析:类的实例化就是为每个实例在内存中分配一块地址:每个类在内存中都有唯一的标识,因此空类被实例化时,编译器会隐含地为其添加一个字节,以作区分. 2.虚函数类 cl ...

  3. C++类大小的计算

    这里记录一下怎么计算类对象的大小. 大概总结下,类的大小需要考虑以下内容: 非静态成员变量大小 数据对齐到多少位 有无虚函数(即需不需要指向虚函数表的指针,如果考虑继承的情况,则还需要看继承了多少个指 ...

  4. 【整理】C++虚函数及其继承、虚继承类大小

    参考文章: http://blog.chinaunix.net/uid-25132162-id-1564955.html http://blog.csdn.net/haoel/article/deta ...

  5. sizeof操作符-结构体与类大小

    导读 sizeof是C/C++一个难点,当在自定义类上应用sizeof操作符时,总会出现意想不到的结果,下面,我们就来探讨一下sizeof这个操作符! 目录 1. sizeof与strlen的区别 2 ...

  6. C++空类大小

    class a {};class b{};class c:public a{ virtual void fun()=0;};class d:public b,public c{}; 类a,b明明是空类 ...

  7. 由于jsp include 很多文件后导致java类大小超过65535 bytes 的解决方法(转载)

    昨天,我遇到了一個讓我很頭疼的問題. 我做了一個共通的jsp,單只測它是ok的,可是,放在別的jsp中include它,就會報錯如標題所示:The code of method _jspService ...

  8. 类的大小——sizeof 的研究

    类的大小——sizeof 的研究(1) 先看一个空的类占多少空间? class Base { public: Base(); ~Base(); }; 注意到我这里显示声明了构造跟析构,但是sizeof ...

  9. C++类对象大小的计算

    (一)常规类大小计算 C++类对象计算需要考虑很多东西,如成员变量大小,内存对齐,是否有虚函数,是否有虚继承等.接下来,我将对此举例说明. 以下内存测试环境为Win7+VS2012,操作系统为32位 ...

随机推荐

  1. 在Android Studio中查看Sqlite的方法

    只说最好的方法,使用工具stetho:http://facebook.github.io/stetho/ 1.在Gragle中加上如下语句: dependencies { // Stetho core ...

  2. Weebly免费自助建站空间:可视化编辑网页搭建网站和绑定域名方法

    Weebly空间来自美国,已经稳定运行了有多年了,2007年被Time 评为50个最佳网站,属自助建站模式,功能强大.部落在09年时介绍了weebly.com自助建站服务,没有想到这多年来,Weebl ...

  3. session一直报错Session store not set on request

    Route::group(['middleware' => ['web']], function () { //});仍然报错,看了 session是使用默认file,没问题:app/stora ...

  4. .net 上传文件大小限制

    1.ii. System.web下修改节点HttpRuntime为 <system.web> <compilation debug="true" targetFr ...

  5. SVN 命令行的使用

    大多数时候我们用TortoiseSVN作为客户端,其实SVN提供了强大的客户端命令行工具,和Git差不不多. 1. 查看工作副本修改的整体状况. $ svn status ? scratch.c A ...

  6. mysql连接时提示错误太多的解决

    mysqladmin flush-hosts -uroot -p -h127.0.0.1 -P3306 然后输入密码就可以了

  7. 【zheng阅读系列】shiro权限管理

    一.配置文件 upms-server/springMVC-servlet.xml <?xml version="1.0" encoding="UTF-8" ...

  8. SQLServer2008 导出数据库表结构和数据

    很多朋友问到sql server数据库”生成脚本”,只导出了数据库的sql脚本,而表里的数据依然没有导出来.很简单,看教程: 注:我这里用的SQLServer2008,其它版本应该差不多. 一.选中要 ...

  9. perl 遍历文件夹,获取全部文件

    main #!/usr/bin/perl my ($path) = @ARGV; sub scan_file{ my @files = glob(@_[0]); foreach (@files){ i ...

  10. [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)

    [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...