加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

你如何确定C中对象的大小?

发布时间:2020-12-16 09:14:06 所属栏目:百科 来源:网络整理
导读:例如,假设我有一个类Temp: class Temp{ public: int function1(int foo) { return 1; } void function2(int bar) { foobar = bar; } private: int foobar;}; 当我创建Temp类的对象时,我将如何计算它需要多少空间,以及它如何在内存中表示(例如| foobar | 4个
例如,假设我有一个类Temp:

class Temp
{
    public:
        int function1(int foo) { return 1; }
        void function2(int bar) { foobar = bar; }

    private:
        int foobar;
};

当我创建Temp类的对象时,我将如何计算它需要多少空间,以及它如何在内存中表示(例如| foobar | 4个字节| function1 | 8的8个字节|)

解决方法

对于一阶近似,对象的大小是其组成数据成员的大小的总和.你可以肯定它永远不会小于此.

更确切地说,编译器有权在数据成员之间插入填充空间,以确保每个数据成员满足平台的对齐要求.一些平台对齐非常严格,而其他平台(x86)更宽容,但通过适当的对齐将表现得更好.因此,即使编译器优化设置也会影响对象大小.

继承和虚函数增加了额外的复杂性.正如其他人所说,类的成员函数本身不占用“每个对象”空间,但该类接口中虚函数的存在通常意味着存在虚拟表,本质上是一个函数指针的查找表,用于动态解析正确的函数实现,以便在运行时调用.通常通过存储在每个对象中的指针来访问虚拟表(vtbl).

派生类对象还包括其基类的所有数据成员.

最后,访问说明符(public,private,protected)通过打包数据成员授予编译器一定的余地.

简短的回答是sizeof(myObj)或sizeof(MyClass)将始终告诉您对象的正确大小,但其结果并不总是很容易预测.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读