嗯, 我搜了一下, c++ 有个lazy allocation机制, 意思就是malloc的时候, 分配的虚拟内存, 只有第一次使用的时候, 才提交成物理内存.
应该是这个问题没跑了
直接换成内存池jemalloc, 性能涨了许多, 不过这个现象仍然在.
都不初始化vector,
========= debug 模式(千万单元)=========
test with malloc, vector un-initialized
time elapsed for allocation finished : 0.77000000(s)
time elapsed for assignment finished : 1.45100000(s)
test with je-malloc, dyna-array un-initialized
time elapsed for allocation finished : 0.02800000(s)
time elapsed for assignment finished : 0.20400000(s)
==============release 模式==============
test with malloc, vector un-initialized
time elapsed for allocation finished : 0.00000000(s)
time elapsed for assignment finished : 0.05400000(s)
test with je-malloc, dyna-array un-initialized
time elapsed for allocation finished : 0.00000000(s)
time elapsed for assignment finished : 0.03500000(s)
【 在 jjfz 的大作中提到: 】
: 感觉是内存分配器虚实转换时机不同造成的
: vector申请了一大块内存,内存分配器只是给出了逻辑地址
: 当访问具体数据时,OS才会映射到物理地址
: ...................
--
FROM 120.244.224.*