堆内存上的结构

时间:2009-12-15 05:25:25

标签: c++ c memory-management

这个问题最近在接受采访时向我询问,我感到困惑!!

"How do you initialize a structure in the heap memory ?" 请问有谁请告诉我这个问题的正确答案?

btw:堆栈和堆内存究竟有何不同? 在查看上述问题时,有些人可能会问我how do you initialize a structure on a stack memory?

这可能是一个基本问题,也可能是一个错误的问题,但我很想知道!

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:7)

堆栈用于分配局部变量,在动态分配内存时使用堆,就像使用malloc()一样。无论哪种情况,您都需要确保初始化结构。你可以使用类似calloc()的东西从堆中分配你的内存,它自动将它归零(malloc没有)。并且堆栈上的变量也没有初始化(如果内存服务)。

答案 1 :(得分:6)

堆栈的生命与定义它的函数实例完全一样 - 当函数intance返回时,该内存可以自由回收(如果它包含一个正确的C ++对象w /析构函数,那么dtor将被调用)。堆一直存在,直到明确释放。

“你如何初始化一个结构”(在任何一种内存上! - )是一个特殊的问题 - 显然是通过它在C ++中自动调用ctor(如果有的话),另外用memcpy之类的东西 - 在堆栈或堆中没有区别。

答案 2 :(得分:1)

struct MyStruct
{
   int foo;
   int bar;
};

...

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

您现在可以使用baz,但其成员foo和bar的值未定义。

答案 3 :(得分:1)

以下是我对面试问题的回答:

How do you initialize a structure in the heap memory?

  1. C ++语言不需要 堆。
  2. 在格式良好的代码中,结构应该初始化 本身在构造函数中,更喜欢初始化列表中的初始化。
  3. 初始化每个字段 单独地,使用指向结构的指针。 可以理解这个问题,假设已经分配了结构。
  4. 在C中,可以使用calloc, 虽然这给每个人分配了零 byte,对于某些对象,这可能不是 是对的。
  5. 就堆和堆栈之间的区别而言,堆栈是先进先出的数据结构。将对象推入堆栈,然后弹出。堆是一块内存,其中的项目几乎是随机分配的。

    在网络上搜索内存分配内存池。许多实现将内存区域实现为朝向堆增长的堆栈。从堆中分配的越多,堆栈的空间就越小,反之亦然。