Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
inline size_t align(size_t x, size_t a) { return ((x-1) | (a-1)) + 1; }
Странно. В точности, как у .NET CLR, как будто он возвращает освободившиеся локальные переменные сразу в соответствующий пул, не дожидаясь GC
Generation 0 collections are the most frequently occurring type of collection and clean up short-lived objects such as local variables.
struct foo
{
~foo()
{
std::cout << "~foo() called\n";
}
};
boost::object_pool<foo> FooPool;
foo * f = FooPool.malloc();
#include <boost/pool/pool.hpp>
#include <boost/pool/object_pool.hpp>
#include <boost/chrono.hpp>
#include <boost/function.hpp>
#include <iostream>
struct Node
{
Node * _next;
};
class Timer
{
public:
Timer(bool isStart = false)
{
if (isStart)
start();
}
void start()
{
_start = boost::chrono::system_clock::now();
}
void stop()
{
_end = boost::chrono::system_clock::now();
}
double elapsed()
{
boost::chrono::duration<double> d = _end - _start;
return d.count();
}
private:
typedef boost::chrono::system_clock::time_point time_point;
time_point _start;
time_point _end;
};
class ScopeTimer : public Timer
{
public:
typedef boost::function<void (double elapsedTime)> Callback;
ScopeTimer(Callback callback) : Timer(false), _callback(callback)
{
start();
}
~ScopeTimer()
{
stop();
_callback(elapsed());
}
private:
Callback _callback;
};
void printElapsedTime(double elapsedTime)
{
std::cout << elapsedTime << "\n";
}
int main()
{
std::cout.precision(10);
std::cout.setf(std::ios::fixed, std::ios::floatfield);
{
boost::object_pool<Node> NodePool;
{
ScopeTimer timer(printElapsedTime);
for (int i = 0; i < 10000000; i++)
Node* v = NodePool.malloc();
}
//std::cin.get(); // в диспетчере задач будет видно, что память выделена, т.к. NodePool еще живой
}
//std::cin.get(); // в диспетчере задач будет видно, что что память очищена, т.к. NodePool уже уничтожен
return 0;
}
но для большей эффективности (чтобы пропустить лишний уровень абстракции), используем VirtualAlloc/VirtualFree
Управление памятью в C++