我知道 max_size()
中的 std::allocator
是一个理论上的限制,但我只是尝试了一些东西,我得到的数字非常大;那么我应该如何解释这个数字以及这个函数背后的哲学是什么?
我的例子:
#include <iostream>
#include <memory>
#include <cstdint>
typedef int8_t Tnum_1;
struct X
{
template <typename T>
static void printAllocInfo()
{
std::cout << std::allocator<T>().max_size() << "\t Alloc max_size\n";
std::cout << ((std::allocator<T>().max_size()) / (1024))
<< "\t Alloc max_size / 1024\n";
std::cout << (((std::allocator<T>().max_size()) / (1024)) / (1024))
<< "\t\t Alloc max_size / 1024 / 1024\n";
}
};
int main()
{
X::printAllocInfo<Tnum_1>();
return (0);
}
它打印:
18446744073709551615 Alloc max_size
18014398509481983 Alloc max_size / 1024
17592186044415 Alloc max_size / 1024 / 1024
并考虑到我只是使用
int8_t
作为模板参数,这意味着我可以在我的机器上分配 18446744073709551615 bytes
吗?这个数字太大了,它开始失去任何实际意义。 最佳答案
您引用的那个数字当然是 2^64 -1,也就是可以表示的最大 64 位无符号整数。所有 max_size()
表示它不支持任何更大的东西,而不是它支持低于该大小的所有东西。
由您的操作系统实际将其提供给您的程序。但是由于您可以在运行它的不同机器上编译程序(包括遥远 future 的机器),因此没有理由将 max_size()
限制为较小的数字。
注意 :如果您阅读 表 31 — C++ 标准中的分配器要求 ,您会发现 a
类型的分配器对象 X
的以下内容:
所以 max_size
是可以分配的最大对象数,而不是字节数。
关于c++ - std::allocator::max_size() 背后的原理是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22183162/