首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个类的大小限制是多少?

一个类的大小限制是多少?
EN

Stack Overflow用户
提问于 2011-12-15 12:53:02
回答 3查看 3.8K关注 0票数 9

我在想一堂课的大小限制是多少。我做了一个简单的测试:

代码语言:javascript
复制
#define CLS(name,other) \
class name\
{\
public: \
name() {};\
   other a;\
   other b;\
   other c;\
   other d;\
   other e;\
   other f;\
   other g;\
   other h;\
   other i;\
   other j;\
   other k;\
};

class A{
   int k;
public:
   A(){};
};

CLS(B,A);
CLS(C,B);
CLS(D,C);
CLS(E,D);
CLS(F,E);
CLS(G,F);
CLS(H,G);
CLS(I,H);
CLS(J,I);

它无法用

‘J’:班级太大了

如果我删除最后的声明- CLS(J,I);,它都编译得很好。

这是编译器强加的限制,还是在标准的某个地方?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-15 12:57:56

在C++11中,这是附件B。实现可以施加限制,但至少应该是:

  • 物体的大小262 144。
  • 数据成员在一个单独的16 384类中。
  • 成员在单一类别4 096中声明。

第三个与你使用的建筑没有直接关系,我提到它只是因为它表明第二个成员确实是全体成员,大概包括那些在基地的成员,我不确定成员中的成员。但这不仅仅是一个类定义中列出的成员的问题。

您的实现似乎放弃了2^31数据成员或大小为2^32的数据成员,因为它接受I,但不接受J。显然,编译器拒绝考虑大小大于SIZE_MAX的类是相当合理的,即使程序碰巧没有实例化它或在类型上使用sizeof。因此,即使编译器尽了最大的努力,我也不会指望它能在32位实现上工作。

请注意,“这些数量只是指南,不能确定遵从性”,因此,即使有足够的资源来编译使用较大数字的程序,一致性含义也可以施加任意较小的限制。没有最低限度的一致性。

在C++标准中,由于资源限制太小,一致性实现是无用的,因此如果这是另一种情况,则不会造成额外的伤害。

C++03或多或少是一样的:

  • 物体的大小262 144。
  • 单个类、结构或联合16 384中的数据成员。
  • 成员在单一类别4 096中声明。
票数 15
EN

Stack Overflow用户

发布于 2019-01-15 04:35:33

我想提到另一个提到类大小限制的地方,在Itanium C++ ABI草案第1.2节中。

此ABI指定的各种表示对符合的用户程序施加了限制。其中包括64位Itanium ABI: 包含它的完整对象中的非虚拟基子对象的偏移量必须由一个56位有符号整数表示(由于RTTI实现)。这意味着对类大小的实际限制为2**55字节。

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 12:55:35

我确信它的编译器依赖于。您可以只在预处理模式下运行编译器,以查看生成的输出(如果您有兴趣的话)。您还可能希望查看模板展开,而不是宏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8520421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档