Использование памяти указателей C ++ - PullRequest
2 голосов
/ 26 марта 2012

Продолжайте ходить по кругу, но мне все еще неясно по этому поводу.Иметь представление об ответе;но не уверен.Какой код ниже занимает больше памяти?[Должен быть первым, если я прав.]

double x;
double* y = new double(x);

ИЛИ

double x;
double* y = &x;

Ответы [ 6 ]

7 голосов
/ 26 марта 2012

Следующее потребляет sizeof( double ) + sizeof( double* ) плюс sizeof( double ) в куче:

double x;
double* y = new double(x);

Следующие расходует sizeof( double ) + sizeof( double* ):

double x;
double* y = &x;
7 голосов
/ 26 марта 2012

В первом случае существуют два double (x, а тот, на который указывает y).x выделяется в стеке, а y - в куче.

В последнем существует только один double (x, на который также указывает y).Здесь нет выделений кучи.

Итак, на первый взгляд, вы правы.

В обоих случаях существует один double настек, и один double* также в стеке.Разница между ними заключается в том, что в первом случае в куче выделяется , а также a double (тот, который выделен new double(x)).Поэтому первый случай требует больше памяти.

1 голос
/ 26 марта 2012

В этом примере:

double x;
double* y = new double(x);

у вас есть пространство памяти для x, для указателя y и новая выделенная память, в которой хранится копия x, и указательна y.

В этом примере:

double x;
double* y = &x;

у вас есть пространство памяти для x, для указателя y, который указывает на x.Это занимает меньше места.

1 голос
/ 26 марта 2012

Первый.Есть два двойных и один указатель (обычно long int)

Во втором у вас есть только один двойной и один указатель

1 голос
/ 26 марта 2012
double x;
double* y = &x;

займет sizeof(double) + sizeof(void*)

double x;
double* y = new double(x);

займет sizeof(double) + sizeof(double) + sizeof(void*). Также выделяет память из кучи через new. Также будет больше накладных расходов на бухгалтерию, основанных на распределителе кучи (особенно, если он разбивает непрерывный свободный кусок), и это будет медленнее.

0 голосов
/ 26 марта 2012

сначала выделяет место для 1 double в первой строке, затем во второй строке выделяет место для 1 указателя и еще одного double и копирует значение из старого.Последние выделяют место для 1 двойника и для указателя.Итак, во-первых, больше памяти.

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