Увеличивает ли объем кода структуру данных? - PullRequest
4 голосов
/ 05 мая 2009

У меня есть список предметов, в которых может быть только десять переменных. Но элементы имеют хороший код, и я хотел бы добавить больше. Мне любопытно, как это повлияет на размер моей структуры. Моя интуиция говорит мне, что у каждого есть стек, но с аргументами, передаваемыми вокруг, и вещами, которые я, вероятно, не считал, я не уверен. Примерно столько, сколько кода добавляется в мою структуру данных?

Ответы [ 7 ]

10 голосов
/ 05 мая 2009

Код не добавляет к размеру вашей структуры.

3 голосов
/ 05 мая 2009

Даже если вы поместите код в тот же набор фигурных скобок, что и данные, компилятор выделит его и поместит в другой раздел памяти.

Таким образом, вам нужна только одна копия кода - нет необходимости делать новую копию для каждого элемента, который его использует.

Только в очень больших проектах фактический размер скомпилированного кода становится проблемой; обычно он не намного больше исходного текста. В небольших программах это, как правило, несколько сотен К, мег или два, максимум. На современных машинах не стоит беспокоиться.

3 голосов
/ 05 мая 2009

Код, связанный с классом, обычно не дублируется для каждого экземпляра, поэтому добавление кода не должно влиять на размер вашего массива.

2 голосов
/ 05 мая 2009

Размер экземпляра объекта (в основном) является суммой его элементов данных. Члены функции не сохраняются для каждого экземпляра и не влияют на размер экземпляра.

Ваша программа имеет один стек на поток. Когда функция вызывается, память стека резервируется для каждого параметра и переменной этой функции и освобождается при ее возврате.

Ваш объект хранится в стеке, если он создан в функции без нового. Если вы используете new, в стеке сохраняется только ссылка, а сам экземпляр сохраняется в куче.

:)

1 голос
/ 05 мая 2009

Каждый объект не имеет своего собственного стека. Стеки для каждого потока / процесса, а не для объекта.

1 голос
/ 05 мая 2009

Функции-члены класса, над которыми работает объект, хранятся по-разному, и это не влияет на размер объекта. Где члены-данные внутри класса будут частью объекта, а размер объекта изменится, если вы измените тип переменной.

например:

class Test
{
    1. member functions

    //it does not matter how many functions you have, this section does not contribute
    // to object size

    2. member variables
    //this contributes to the object size, define an int or  double etc will change the object size
}
1 голос
/ 05 мая 2009

Код не хранится в куче.

Независимо от того, сколько объектов вы создаете, код будет храниться только в одном месте.

...