структура на куче памяти - PullRequest
       5

структура на куче памяти

4 голосов
/ 15 декабря 2009

Этот вопрос недавно был задан мне в интервью, из-за которого я запутался !!

"How do you initialize a structure in the heap memory ?" Кто-нибудь может сказать, пожалуйста, правильный ответ для этого?

Кстати: насколько именно стек и куча памяти отличаются друг от друга? И, глядя на вышеупомянутый вопрос, некоторые могут также спросить меня о how do you initialize a structure on a stack memory?.

Может быть, это основной вопрос или тоже неправильный вопрос, но мне просто интересно знать!

Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 4 ]

7 голосов
/ 15 декабря 2009

Стек используется для выделения локальных переменных, куча используется, когда вы динамически выделяете память, как в malloc (). В любом случае вам нужно убедиться, что вы инициализировали свою структуру. Вы можете использовать что-то вроде calloc () для выделения памяти из кучи, которая автоматически обнуляет ее (malloc не делает). И переменные в стеке также не инициализируются (если память служит).

6 голосов
/ 15 декабря 2009

Стек живет ровно столько времени, сколько определит его экземпляр функции - когда эта функция возвращает intance, эта память освобождается для повторного использования (если она содержит надлежащий объект C ++ с деструктором и всем остальным, этот dtor будет вызван). Куча живет до тех пор, пока не будет явно освобождена.

«Как вы инициализируете структуру» (в любом виде памяти! -) - это особый вопрос - очевидно, через его автоматически вызываемый ctor в C ++ (если есть), другой с memcpy или подобным - нахождение в стеке или куче не имеет значения.

1 голос
/ 15 декабря 2009

Вот мой ответ на вопрос интервью:

How do you initialize a structure in the heap memory?

  1. Язык C ++ не требует куча.
  2. В правильно сформированном коде структура должна инициализироваться сам в конструкторе, предпочитая инициализацию в списке инициализации.
  3. Инициализировать каждое поле индивидуально, используя указатель на структуру. Вопрос можно прочитать, предполагая, что структура уже выделена.
  4. В C можно использовать calloc, хотя это назначает нули каждому байт, для некоторых объектов это не может будь прав.

Что касается разницы между кучей и стеком, стек - это структура данных «первым пришел - первым вышел». Объекты помещаются в стек, а затем выталкиваются. Куча - это кусок памяти, в котором элементы распределяются практически случайным образом.

Поиск в Интернете выделения памяти и пулов памяти . Многие реализации реализуют область памяти в виде стека, который растет в направлении кучи. Чем больше вы выделяете из кучи, тем меньше места для стека и наоборот.

1 голос
/ 15 декабря 2009
struct MyStruct
{
   int foo;
   int bar;
};

...

struct MyStruct* baz = malloc(sizeof(MyStruct));

Теперь вы можете использовать baz, но значения его членов foo и bar не определены.

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