gpt4 book ai didi

c++ - 为什么char的大小在内存中是4个字节而空类是1个字节

转载 作者:太空狗 更新时间:2023-10-29 20:42:23 25 4
gpt4 key购买 nike

一天中的好时光!

我写了一些代码,但我无法理解一些奇怪的内存异常。任何对类内存使用有适当了解的人都可以给我解释一下吗?

我的代码:

#include <iostream>

using namespace std;

class O
{
O();
~O();
};

class A
{
public:
A();
~A();
void someFunc();
private:
int m_a;
};

class B: public A
{
public:
B();
virtual ~B();
private:
int m_b;
};

class C: public B
{
public:
C();
~C();
private:
char m_c;
};

int main()
{
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(O) << endl;
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
cin.get();
return 0;
}

输出:

1  //normal for char
4 //normal for int on x32
1 //why empty class occupies 1 byte?
4 //int m_a. Where is 1 byte?
12 //4B virtual function, 8B - m_a and m_b.
16 //char needs 1 byte. Why it gets 3 more?

感谢您的关注和解答)

最佳答案

  • 空类:每个完整的对象都必须有一个唯一的地址。考虑 EmptyClass a[10],以及数组元素是完整对象的事实,并考虑指针算法的工作原理。

  • int m_a?你的假设是没有根据的。如果您已经有有意义的字节,则不需要额外的虚拟字节。

  • C:填充。再次考虑数组和对齐。 C 类将具有int 的对齐方式,并且 C a[10] 的每个数组成员都必须对齐,并且数组成员必须是连续的.

关于c++ - 为什么char的大小在内存中是4个字节而空类是1个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com