c++ - C++中的对象大小是不可预测的

标签 c++ object memory size sizeof

<分区>

#include<iostream>
using namespace std;
class Test
{
    int a;
    double d;
    char c;
};

int main()
{
    cout<<sizeof(int)<<endl;
    cout<<sizeof(double)<<endl;
    cout<<sizeof(char)<<endl;
    cout<<sizeof(Test)<<endl;
    Test sobj;
    Test *dobj = new Test();
    cout<<dobj<<endl;
    dobj++;
    cout<<dobj<<endl;
    cout<<sizeof(sobj)<<endl;
    cout<<sizeof(dobj)<<endl;

    return 0;
}

输出:

4
8
1
24
00380A08
00380A20
24
4

我的问题是,当我们使用 sizeof 运算符打印类的大小时,它显示为 24 个字节,因为没有应用填充很清楚,但是当我看到地址之间的差异时,它显示类大小为 12 个字节,这是怎么回事正在分配内存..??

最佳答案

地址是十六进制的(正如您从 A 中看到的那样)。 0x20 是十进制的 32:差值(十进制)不是 20 - 8,而是 32 - 8 = 24。

关于c++ - C++中的对象大小是不可预测的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095103/

相关文章:

c++ - 不能在 C++ 中的另一个对象中更改对象的属性

c++ - 为什么 C++ 构造函数必须对数组使用动态分配?

java - 每次创建新的 Java 对象或重用一个

c# - 为什么拆箱比装箱快 100 倍

r - 具有共享数据的多个 ggplot2 图表

c++ - PostMessage() 来模拟 C++ 中的输入?

c++ - c和c++中函数指针的区别

c++ - 在没有 IDE 的情况下用 C++ 手工编写 Windows GUI

c++ - 将 shared_ptr 转换为不同命名空间中相同类型的 shared_ptr

CUDA:使用网格跨步循环减少共享内存