没有数据成员的类的大小返回为1个字节,即使声明了隐含的"this"指针.返回的大小不应该是4个字节(在32位机器上)?我遇到过一些文章,表明"this"指针不计算用于计算对象的大小.但我无法理解这个原因.此外,如果任何成员函数声明为virtual,则类的大小现在返回为4个字节.这意味着计算vptr以计算对象的大小.为什么在计算对象大小时会考虑vptr并忽略'this'指针?
在下面的代码中,我不明白为什么'Derived1'需要与'Derived3'相同的内存量.Derived 4的大小也是16的任何特定意义.
#include <iostream>
using namespace std;
class Empty
{};
class Derived1 : public Empty
{};
class Derived2 : virtual public Empty
{};
class Derived3 : public Empty
{
char c;
};
class Derived4 : virtual public Empty
{
char c;
};
class Dummy
{
char c;
};
int main()
{
cout << "sizeof(Empty) " << sizeof(Empty) << endl;
cout << "sizeof(Derived1) " << sizeof(Derived1) << endl;
cout << "sizeof(Derived2) " << sizeof(Derived2) << endl;
cout << "sizeof(Derived3) " << …Run Code Online (Sandbox Code Playgroud) class MyClass
{
// empty class with no base class
};
int main()
{
MyClass* myClass = new MyClass();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是内存泄漏吗?
以下行打印输出为4,而我期待0.
printk(KERN_INFO "size of spinlock_t %d\n", sizeof(spinlock_t));
Run Code Online (Sandbox Code Playgroud)
我在一个单CPU的系统上试过这个.构建内核时没有启用调试标志CONFIG_DEBUG_SPINLOCK or CONFIG_DEBUG_LOCK_ALLOC.根据内核头文件,它应该为零,但输出与它不一致,任何猜测?
我正在研究C++:以下是代码片段:
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
Run Code Online (Sandbox Code Playgroud)
我发现类"my"的大小是1个字节.我不明白为什么值是1个字节?任何人都能解释一下这个结果吗?
我正在尝试实现自己的函子,并面临空的捕获lambda。如何区分一个字符的空结构?编译时是否有“实际”大小?我只想忽略空的lambda以防止无用的分配。
struct EmptyStruct {};
struct CharStruct { char c; };
int main()
{
char buffer1[sizeof(EmptyStruct)]; // size 1 byte
char buffer2[sizeof(CharStruct)]; // size 1 byte
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
C++:空类对象的大小是多少?
#include <iostream>
class C
{
};
int main()
{
std::cout << sizeof(C) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:1
为什么1,但不是零?
可能重复:
C++:空类对象的大小是多少?
我有一个没有数据的类,如下所示
class A {};
Run Code Online (Sandbox Code Playgroud)
我用它来定义一个对象
A a;
Run Code Online (Sandbox Code Playgroud)
我认为对象"a"有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?
如果对象"a"的类型为void,会发生什么.非常感谢!
如果我有一个定义的结构,如下所示:
struct blank {
int : 0;
};
Run Code Online (Sandbox Code Playgroud)
编译器会在运行时将其优化为零吗?
我问,因为这个相当受欢迎的SO问题.我想在我自己的C/C++代码中使用类似的编译时检查.我正在尝试使程序尽可能最佳,所以如果我只是将它们用于编译时检查,我不希望这些空结构在运行时闲置.
另一方面,是否有一种C++ - 惯用的方式来实现与链接相同的结果?
class Test
{
void func(){int i;}
};
int main()
{
cout<<sizeof(Test)<<endl; //gives 1
}
Run Code Online (Sandbox Code Playgroud)
为什么sizeof(Test)不考虑函数的大小.功能在哪里真正与它的身体存储?在Google中找不到任何链接来解释这一点.
编辑:如果除了维基之外提供有关类内部分的任何好的链接,那将是很好的.
c++ ×10
class ×2
sizeof ×2
struct ×2
c ×1
compile-time ×1
is-empty ×1
kernel ×1
linux ×1
linux-kernel ×1
memory ×1
memory-leaks ×1
oop ×1
unions ×1