Я пытаюсь понять, какую память ударит, я понесу, создав большой массив объектов. Я знаю, что каждому объекту - когда он создан - будет предоставлено пространство в HEAP для переменных-членов, и я думаю, что весь код для каждой функции, принадлежащей этому типу объекта, существует в сегменте кода в памяти - навсегда.
Правильно ли это?
Итак, если я создаю 100 объектов на С++, я могу оценить, что мне понадобится пространство для всех переменных-членов, которым принадлежит объект, умноженное на 100 (возможные проблемы выравнивания здесь), а затем мне нужно пространство в сегменте кода для одной копии кода для каждой функции-члена для этого типа объекта (не 100 копий кода).
Влияют ли виртуальные функции, полиморфизм, фактор наследования?
Как насчет объектов из динамически связанных библиотек? Я полагаю, что dlls получают свои собственные сегменты стека, кучи, кода и данных.
Простой пример (не может быть синтаксически правильным):
// parent class
class Bar
{
public:
Bar() {};
~Bar() {};
// pure virtual function
virtual void doSomething() = 0;
protected:
// a protected variable
int mProtectedVar;
}
// our object class that we'll create multiple instances of
class Foo : public Bar
{
public:
Foo() {};
~Foo() {};
// implement pure virtual function
void doSomething() { mPrivate = 0; }
// a couple public functions
int getPrivateVar() { return mPrivate; }
void setPrivateVar(int v) { mPrivate = v; }
// a couple public variables
int mPublicVar;
char mPublicVar2;
private:
// a couple private variables
int mPrivate;
char mPrivateVar2;
}
О том, сколько памяти должно содержать 100 динамически выделенных объектов типа Foo, включая комнату для кода и всех переменных?