С++ новый первичный тип, в стеке или куче?

avatar
user218867
8 апреля 2018 в 08:43
54
1
-1

Я знаю, что в c++ локальные первичные типы размещаются в стеке, а new настраиваемый класс размещается в куче.

Но что, если создать первичную переменную через new, будет ли она размещена в куче или останется в стеке?

например:

function void test() {
  int *pi = new int(1);
}

Я знал, что в стеке функции есть указатель pi.
Но как насчет объекта, на который он указывает (он же *pi), находится ли он в стеке или в куче?

Интересно, похож ли он на основной тип оболочки (например, Integer) из Java.

Источник
StoryTeller - Unslander Monica
8 апреля 2018 в 08:44
0

Предпосылка вашего вопроса показывает, что ваше понимание является неточным. Нет ничего, что не могла бы исправить хорошая книга по C++.

Mat
8 апреля 2018 в 08:45
0

Что такое первичный тип?

user218867
8 апреля 2018 в 08:46
0

@StoryTeller Я не программист на С++, просто сейчас пытаюсь улучшить этот навык, спасибо за рекомендацию.

Some programmer dude
8 апреля 2018 в 08:49
0

Я не был уверен, чего именно вы хотели, но переместил свой комментарий в ответ.

user218867
8 апреля 2018 в 08:54
0

@Someprogrammerdude Я пытаюсь узнать, когда new применяется к первичному типу в С++, похоже ли это на случай первичного типа оболочки в Java (например, Integer), и, согласно вашему ответу, это так.

Snowhawk
8 апреля 2018 в 09:09
0

Возможный дубликат стека, статики и кучи в C++

Ответы (1)

avatar
Some programmer dude
8 апреля 2018 в 08:49
3

Для этого необходимо выделить два фрагмента памяти:

  1. Один создан с помощью new и находится в "куче". Это выделяется во время выполнения.

  2. Другой — это хранилище самой переменной pi, и поскольку это локальная переменная, компилятор, скорее всего, поместит ее в стек. Эта память в стеке «выделяется» (точнее, резервируется) во время компиляции.

Также обратите внимание, что в 64-битной системе, где указатели являются 64-битными, компилятор выделит 8 байтов в стеке для переменной, а затем ваша программа выделит 4 байта в куче (размер int обычно 4 байта).