gpt4 book ai didi

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:44 24 4
gpt4 key购买 nike

在学习(和试验)STL 容器时,我发现我的系统(gcc 版本 4.7.2,x86_64)上的 vector max_size = 4611686018427387903 和 deque max_size = 2305843009213693951。根据我(有限)的理解,双端队列通常在内部实​​现为 vector 列表(或 vector 的 vector ?)。如果是这种情况,那么为什么 deque 的 max_size 小于 vector 的 max_size which(vector) 实际上需要连续的内存块并且 deque 可以使用多个连续的 block ?它与我的系统配置、当前状态有什么关系,或者它必须是这样吗?

最佳答案

我在您的问题中遗漏了一个细节:您使用哪些类型测试了 max_sizes? Ideone 的 gcc 4.7.2(在 32 位上)说 both have the same max_size - 如果给定相同的元素类型。对于 int 它的 2^30-1 - 这意味着存储数据的最大大小为 (2^32 - 4)字节,自 sizeof(int) == 4在那个系统上。

这是一个疯狂的猜测:你比较过vector<T>::max_size吗?与 deque<U>::max_sizesizeof(T) == 4sizeof(U) == 8 ?这将解释近似因子 2。

尽管如此,您的实验表明,max_size 仅返回一个非常理论上的数字,因为您肯定无法获得 2^62-1整数存入内存。 -1 源于“前”4 个字节必须留空的事实,否则 &vec[0] == NULL .除了 vector 中存储的整数之外,该程序中不能有任何其他数据 - 包括 vector 本身!

关于c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com