C++ 中的数组有最大长度吗?
它是 C++ 限制还是取决于我的机器?可以调整吗?它是否取决于数组的类型?
我可以以某种方式打破这个限制,还是我必须寻找更好的信息存储方式?什么应该是最简单的方法?
我要做的是将 long long int 存储在一个数组上,我在 Linux 环境中工作。我的问题是:如果我需要存储一个 N > 10 位的长整数数组,我该怎么办?
我需要这个,因为我正在为学校编写一些密码算法(例如 p-Pollard),并且遇到了整数和数组表示长度的这堵墙。
有两个限制,都不是由 C++ 强制执行的,而是由硬件强制执行的。
第一个限制(永远不应达到)由用于描述数组中索引的大小类型(及其大小)的限制设置。std::size_t它由系统可以采用的最大值给出。此数据类型足够大,可以包含任何对象的字节大小
std::size_t
另一个限制是物理内存限制。数组中的对象越大,越早达到此限制,因为内存已满。例如,vector<int>给定大小 n 的 a通常占用的内存是类型数组的数倍vector<char>(减去一个小的常量值),因为int它通常大于char。因此,在内存已满之前,avector<char>可能包含比 a 更多的项目。vector<int>原始 C 样式数组(如int[]和)也同样适用char[]。
vector<int>
vector<char>
int
char
int[]
char[]
此外,这个上限可能会受到allocator用于构造的类型的影响,vector因为 anallocator可以自由地以任何它想要的方式管理内存。一个非常奇怪但仍然可以想象的分配器可以以对象的相同实例共享资源的方式共享内存。这样,您可以将大量相同的对象插入到容器中,否则会耗尽所有可用内存。
allocator
vector
除此之外,C++ 不强制执行任何限制。