Распределение памяти с использованием указателя VS без использования указателя

Есть ли разница в использовании памяти между следующими двумя кодами в C ++?

int *val = new int(5);

а также

int val = 5;

-3

Решение

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

Ваш второй пример требует только sizeof(int) который может в конечном итоге быть опущен полностью (путем оптимизации) в зависимости от того, как он используется.

5

Другие решения

«Есть ли разница в использовании памяти между следующими двумя кодами в C ++?»

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

Вы можете прочитать о RAII идиома, относительно вашего 2-го образца (хотя просто иметь дело с простым int ценит все, что оказывается тривиальным).

Примечание с ++ new не обрабатывается так же, как в или же язык, нет сборщика мусора.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector