对于我的一个应用程序,我需要生成大小为2 ^ 35的向量(我的RAM的大小为96 GB,因此这个向量可以很容易地适应RAM).
int main ()
{
int i;
/* initialize random seed: */
srand (time(NULL));
vector<int> vec;
do {
i = rand() % 10 + 1;
vec.push_back(i);
} while ((vec.size()*sizeof(int))<pow(2,35));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,我注意到我的while while循环无限执行.其中一个可能的原因是vec.size()long unsigned int的范围,它远远小于插入的元素的数量pow(2,35),因为我认为它在无限循环中.我可能错了.如果我错了,请纠正我.但有人可以告诉我如何pow(2,35)在vec中插入大于数字的数字.
gcc版本:4.8.2
更新
正如 Baum mit Augen 所强调的,这篇文章并没有真正回答这个问题,因为在他的平台中,条件 4 不成立(sizeof(std::size_t)实际上是8)。不过,我将这篇文章留在这里是为了强调移植代码时可能出现的问题。
原帖
我看到的一个问题如下。让我们假设(大多数平台都满足这些假设)
1)vec.size退货std::size_t(不保证);
2)sizeof退货std::size_t(有保证);
3)std::size_t是无符号整数类型(保证);
4)sizeof(std::size_t) == 4(不保证);
5) CHAR_BIT == 8(不保证)。
(回想一下,这CHAR_BIT是 a 中的位数char。)
因此, 的类型vec.size()*sizeof(int)为std::size_t,其最大值为2^(sizeof(std::size_t)*CHAR_BIT) - 1 == 2^32 - 1 < 2^32 < 2^35。因此,vec.size()*sizeof(int)总是小于2^35。