Answers:
有两个限制,不是由C ++强制执行,而是由硬件强制执行。
通过用于描述数组中的索引的大小类型(及其大小)的限制来设置第一个限制(永远不要达到)。它由系统std::size_t
可以采用的最大值给出。此数据类型足够大,可以包含任何对象的字节大小
另一个限制是物理内存限制。数组中的对象越大,因为内存已满,越早达到此限制。例如,vector<int>
给定大小n的a通常占用的内存是类型数组的数倍vector<char>
(减去较小的常数),因为int
通常大于char
。因此,a vector<char>
可能比vector<int>
内存已满之前包含的项目更多。对于原始C样式数组(例如int[]
和),其计数也相同char[]
。
此外,此上限可能会受allocator
用于构造的类型的影响,vector
因为an allocator
可以随意使用其想要的任何方式来管理内存。一个非常奇怪但仍然可以想到的分配器可以以相同对象实例共享资源的方式来缓冲内存。这样,您可以将很多相同的对象插入到容器中,否则将耗尽所有可用内存。
除此之外,C ++没有任何限制。
new
或的参数限制了一块内存的大小malloc
。可以通过指针访问比数组大的内存块。