gpt4 book ai didi

c++ - 动态子对象内存分配 Clang++ vc g++

转载 作者:行者123 更新时间:2023-11-28 02:42:37 25 4
gpt4 key购买 nike

我对子对象的动态内存分配过程有疑问。代码:

#include <iostream>

using std::cout;
using std::endl;

struct S
{
long l;
};

struct V
{
long d;
};

struct A
{
int a;
};

struct B : A, S, V
{
void * operator new(std::size_t t)
{
cout << t << endl;
return ::operator new(t);
}
};

B *b = new B; // Prints 12 for g++ and 24 for clang++.

int main()
{
b -> a = 23;
b -> l = 3L;
b -> d = 52L;
}

demo for g++

demo for clang++

g++clang++的结果是不一样的。但是因为 8 + 8 + 4 = 20,我预计 20 会被打印出来。你能解释一下传递给 operator new 的这种参数值的意义吗?

最佳答案

看起来您默认为 gcc 使用 32 位模式,为 clang 使用 64 位模式。 long 的大小至少足以表示 32 位。这将为 int 使用 4 个字节和 long在典型的 32 位系统上。在 64 位系统上 intlong倾向于使用 64 位,即 32 位。您可能想要打印 sizeof(int)sizeof(long) .即使sizeof(int) < sizeof(long)该类型可能会被填充为 sizeof(long). 的倍数

关于c++ - 动态子对象内存分配 Clang++ vc g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462865/

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