Kun*_*dan 14 c++ vector max-size
在32位系统上.
std::vector<char>::max_size()返回2 32 -1,大小为char-1字节std::vector<int>::max_size()返回2 30 -1,大小为int-4字节std::vector<double>::max_size()返回2 29 -1,大小为double- 8字节任何人都可以告诉我max_size()取决于什么?
max_size()如果它在64位系统上运行,它的返回值是多少?
Ant*_*ams 21
max_size()是可以放在向量中的理论最大项目数.在32位系统上,理论上可以分配4Gb == 2 ^ 32,即2 ^ 32 char值,2 ^ 30 int值或2 ^ 29 double值.您的实现似乎正在使用该值,但减去1.
当然,你永远不可能真正分配一个大的矢量; 很久以前你就会耗尽内存.
除了max_size()不能分配大于该值的向量之外,没有要求返回什么值.在64位系统上,它可能返回2 ^ 64-1 char,或者它可能返回一个较小的值,因为系统只有有限的内存空间.64位PC通常仅限于48位地址空间.
小智 11
只需通过以下方式获得答案
std::vector<dataType> v;
std::cout << v.max_size();
Run Code Online (Sandbox Code Playgroud)
或者我们可以通过 得到答案(2^nativePointerBitWidth)/sizeof(dataType) - 1。例如,在 64 位系统上,long long(通常)是 8 字节宽,所以我们有(2^64)/8 - 1 == 2305843009213693951.
由于系统或库实现限制,向量可能达到的最大可能大小.
所以我认为最大值是依赖于实现的.在我的机器上有以下代码
std::vector<int> v;
cout << v.max_size();
Run Code Online (Sandbox Code Playgroud)
产生输出:
4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target
Run Code Online (Sandbox Code Playgroud)
所以公式2 ^(64-大小(类型)) - 1看起来也适用于那种情况.
| 归档时间: |
|
| 查看次数: |
26333 次 |
| 最近记录: |