Моя цель - создать вектор, содержащий много предварительно подготовленных (у меня нет двух членов данных до тех пор, пока позже, но я хочу выделить столько, сколько я могу в непрерывной памяти) экземпляры моего объекта в непрерывной памяти, а затем позже в моем Я могу быстро использовать одну из этих подготовленных "оболочек", чтобы быстрее создать экземпляр объекта. Самое главное, что все эти объекты будут расположены в одинаковых адресах постоянной памяти.
Чтобы достичь вышеуказанного, я сделал следующее:
vector<MyClass*>* v = new vector<MyClass>();
v.reserve(10000);
//Later on....
// I want to create my object in the continuous memory I "reserved"
// and have a variable name to it:
v->push_back(MyClass m(10,20));
process(m);
Но я не могу его компилировать, но все еще имея имя переменной на объекте... вот MyClass:
class MyClass{
public:
MyClass();
MyClass(int a, int b);
MyClass(const MyClass& m);
int a;
int b;
private:
//Made above example simpler by putting everything public
}
Я делаю объект пула, но я не пытаюсь выделить их в непрерывной памяти, потому что речь идет не о кешировании памяти, а о минимизации вызовов для new
и delete
.
Я сохраняю используемые объекты в свободном списке. Когда я больше не нуждаюсь в нем, я нажимаю его в свободном списке. Затем, когда мне это нужно, я просто выхожу из бесплатного списка. Если свободный список пуст, это когда я new
новый.