我有一个内存管理器,我想与其他内存管理器进行比较,无论是在性能方面(例如速度,开销,任何有用的)还是在压力方面(例如碎片)。
如何编写一个有意义的基准来比较一个内存管理器与另一个内存管理器的性能?
作为一个例子,我可以想象随机分配和释放逐渐增加大小的块,如下面的代码所示,测试看看分配更多内存块需要多长时间。
但是,我不确定这样的测试是否有意义。我从哪里开始?
#include <math.h>
#include <time.h>
#include <iostream>
#include <memory>
#include <utility>
#include <vector>
unsigned int rand_uint()
{
return (static_cast<unsigned int>(rand()) << (0 * sizeof(unsigned short) * CHAR_BIT)) ^
(static_cast<unsigned int>(rand()) << (1 * sizeof(unsigned short) * CHAR_BIT));
}
int main()
{
typedef std::vector<char> V;
V::allocator_type alloc;
std::vector<std::pair<V::value_type *, size_t> > v(0x12000);
clock_t start = clock(), prev = start;
for (size_t n = 0, n_prev = n, m = 0;; ++n, ++m)
{
std::pair<V::value_type *, size_t> new_buf(NULL, static_cast<size_t>(pow(m, 0.7)));
new_buf.first = alloc.allocate(new_buf.second);
using std::swap; swap(new_buf, v[rand_uint() % v.size()]);
if (new_buf.first) { alloc.deallocate(new_buf.first, new_buf.second); }
clock_t const now = clock();
if (now >= prev + CLOCKS_PER_SEC * 1 / 4)
{
std::cerr << "n = " << n << "; at "
<< (n - n_prev) * CLOCKS_PER_SEC / (now - prev + 1)
<< " allocations/second" << std::endl;
prev = now;
n_prev = n;
}
}
}