当前位置: 首页 > wzjs >正文

垂直网站做网站需要哪些费用支出

垂直网站,做网站需要哪些费用支出,河南省建设厅建筑业信息网,北京所有公司名单本文将探讨C类中成员变量的内存分布情况,包括普通成员、静态成员、虚函数等不同情况下的内存布局。 一、基本成员内存布局 1. 普通成员变量 普通成员变量按照声明顺序在内存中连续排列(受访问修饰符和内存对齐影响): class Nor…

本文将探讨C++类中成员变量的内存分布情况,包括普通成员、静态成员、虚函数等不同情况下的内存布局。


一、基本成员内存布局

1. 普通成员变量

普通成员变量按照声明顺序在内存中连续排列(受访问修饰符和内存对齐影响):

class NormalClass {
public:int a;      // 4字节char b;     // 4字节(考虑int对齐)double c;   // 8字节char d;     // 8字节(考虑double 对齐)
};
// sizeof(NormalClass) = 24 (考虑对齐填充)

内存布局:

| 0-3: int a | 4: char b | 5-7: padding | 8-15: double c | 16: char d | 17-23: padding |

2. 带继承的内存布局

派生类的成员追加在基类成员之后:

class Base {
public:int base_var; // 4字节
};class Derived : public Base {
public:int derived_var; // 4字节,再加上Base 类的 4字节,总共8字节
};

内存布局:

| 0-3: Base::base_var | 4-7: Derived::derived_var |

二、静态成员的内存分布

静态成员不占用类实例的内存空间,存储在全局数据区

class WithStatic {
public:int normal_var;         // 占用实例空间static int static_var;  // 不占用实例空间
};
// sizeof(WithStatic) == sizeof(int)

三、虚函数对内存的影响

1. 含有虚函数的类

编译器会隐式添加虚表指针(vptr),通常放在对象起始位置,虚函数表(vtable)本身不占用类实例的内存空间,vtable 存储在程序的只读数据段(全局静态区),每个类(而非对象)共享一个 vtable。虚表指针(vptr)会占用类实例的内存空间,每个对象实例中存储一个指向 vtable 的指针,在 64 位系统中占用 8 字节,32 位系统中占用 4 字节:

class WithVirtual {
public:virtual void foo() {}  // 添加vptrint a;
};
// 在32位系统上sizeof(WithVirtual) == 8 (vptr + int)
// 在64位系统上sizeof(WithVirtual) == 16 (vptr + int + padding)

内存布局(64位系统):

| 0-7: vptr | 8-11: int a | 12-15: padding |

2. 继承体系中的虚函数

派生类与基类共享同一个vptr(单继承情况下):

class BaseWithVirtual {
public:virtual void foo() {}int base_var;
};class DerivedVirtual : public BaseWithVirtual {
public:virtual void bar() {}  // 添加到虚表int derived_var;
};

内存布局(64位系统):

| 0-7: vptr | 8-11: Base::base_var | 12-15: Derived::derived_var |

四、多继承的内存布局

多继承情况下,每个基类子对象按声明顺序排列:

class Base1 { public: int base1_var; };
class Base2 { public: int base2_var; };class MultiDerived : public Base1, public Base2 {
public:int derived_var;
};

内存布局:

| 0-3: Base1::base1_var | 4-7: Base2::base2_var | 8-11: derived_var |

五、验证内存布局的代码

#include <iostream>
#include <cstddef>#define PRINT_OFFSET(className, member) \std::cout << "Offset of " #member ": " \<< offsetof(className, member) << std::endlstruct Test {virtual void foo() {}  // 添加vptrint a;char b;static int c;
};int main() {std::cout << "Sizeof Test: " << sizeof(Test) << std::endl;PRINT_OFFSET(Test, a);  // 64位系统输出 8PRINT_OFFSET(Test, b);  // 64位系统输出 12return 0;
}

总结表格

特性是否影响实例大小存储位置
普通成员变量栈/堆
静态成员变量全局数据区
虚函数是(添加vptr)虚表
继承追加基类成员
虚继承更复杂布局

注意事项

  1. 实际内存布局可能因编译器实现不同而有所差异
  2. 使用 offsetof 宏验证偏移量
  3. 内存对齐可通过 #pragma pack 指令调整
http://www.dtcms.com/wzjs/590935.html

相关文章:

  • wordpress建站系统视频教程哪里有网站建设联系方式
  • 南宁网络企业网站win7 做网站服务器
  • 网站备案 后期网络架构方案书
  • 哪些作弊网站龙光城业主论坛家在深圳
  • 网站建设 seo模块北京哪家制作网站好
  • 网站制作广建网站一定要备案吗
  • 合肥 做网站的公司网上花店 网站源代码
  • 建网站 企汇网php快速建网站
  • 江西南昌电子商务网站建设公司南京专业做网站的公司
  • 做网站比较便宜各种网站
  • 加强 廉政网站建设二手交易网站开发系统
  • 动图从哪个网站做怎么做qq代刷网站
  • 网站后台管理员扫描廉政网站建设经验交流
  • 网站开发工作室邯郸之战
  • wordpress外贸网站wordpress cookie
  • 农村建设网站溧阳做网站的哪家好
  • 徐州网站建设方案推广wordpress置顶重复
  • 广州一站式网站建设企业运营包括哪些环节
  • 网站建设丿金手指谷哥12招聘网站可以做两份简历吗
  • 网站投入费用网站建设行业怎么样
  • 南昌做网站的流程莱芜建设网站
  • 怎样优化自己的网站网络设置ip地址
  • 为什么网站要备案58同城石家庄网站建设
  • 网站开发项目详细计划友情链接交易
  • 宠物网站建设进度表网络推广策划思路
  • discuz论坛 整合到网站北美跨境电商平台有哪些
  • 做一个自适应网站多少钱陵川网站建设
  • 南京百度网站建设做网站的预算表
  • 静态网站怎么做优化flash可以让网页动起来
  • 厦门网站建设咨询wordpress漏洞利用工具