原因很简单,因为你用的是rand函数,这个函数的随机数取值范围是[0, RAND_MAX],RAND_MAX的值是32767(这个值是否为C标准定义的不清楚,起码Windows平台是这样),所以你的std::map最多就只能存RAND_MAX个key,内存不会一直膨胀下去。你可以在每次循环结束打印一下map的长度,如下代码:
[C++] 纯文本查看 复制代码 #include <iostream>
#include <chrono>
#include <ctime>
#include <Windows.h>
#include <atltime.h>
#include <sys/timeb.h>
#include <sys/types.h>
#include <map>
typedef unsigned long ULONG;
int main() {
std::map<ULONG, ULONG> map;
srand(time(0));
printf("RAND_MAX: %d\n", RAND_MAX);
for (size_t i = 0; i < 163840000; i++) {
map.insert(std::make_pair(rand(), rand()));
printf("%d\n", map.size());
}
return 0;
} |