什么是C ++中最大的数据类型

时间:2015-11-29 17:42:45

标签: c++ c++11

我搜索了c ++中最大的数据类型,但是每个站点都写了不同的数据类型。如果有专家,他(她)可以写答案。这一点很重要。 感谢。

2 个答案:

答案 0 :(得分:4)

它(标量类型的最大尺寸)是特定于实现的

你可能有一些奇怪的实现,64位宽charsizeof(char)sizeof(int)sizeof(long)sizeof(long long)sizeof(void*)一切都是1。

我不知道C ++ 11的这种实现,但我听说在SBCL以上的奇怪的C99实现做了类似的事情。我可能错了。

AFAIK,long long应至少为64位宽。 long double通常比那更广泛(但我不知道标准要求所需的)。

此外,实现可以具有额外的(和特定的)内置类型,例如, 最新GCC

上的_int128_t

如果您关心最大的对齐方式,则问题略有不同,请参阅this。 (并且x86-64上的16个字节是良好的对齐,例如由于AVX)。

当然,聚合(例如struct或数组)可以具有相当大的大小(并且在GCC上,比内置类型更大的对齐)。

实用最大的聚合大小肯定受到virtual address space的限制(所以在平板电脑或笔记本电脑上只有几千兆字节,如果你有足够的资源可以访问,那么就会有很多太字节甚至数PB一些昂贵的超级计算机)。

然而,call stack 实际通常仅限于几兆字节(或昂贵的超级计算机上的千兆字节)。因此,在堆上更好地分配大量数据结构(请注意,像std::vector这样的STL容器通常会在堆中分配大部分数据,即使容器是局部变量也是如此。

具体而言,在堆上分配几千兆字节以上的连续区域时(在平板电脑上可能会失败)时要小心。

答案 1 :(得分:2)

我很确定你不能得到比这更大的类型:

struct Big
{
    char buf[static_cast<size_t>(-1)];
};
相关问题