这个问题最近在接受采访时向我询问,我感到困惑!!
"How do you initialize a structure in the heap memory ?"
请问有谁请告诉我这个问题的正确答案?
btw:堆栈和堆内存究竟有何不同?
在查看上述问题时,有些人可能会问我how do you initialize a structure on a stack memory?
。
这可能是一个基本问题,也可能是一个错误的问题,但我很想知道!
有人可以帮忙吗?
答案 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?
calloc
,
虽然这给每个人分配了零
byte,对于某些对象,这可能不是
是对的。就堆和堆栈之间的区别而言,堆栈是先进先出的数据结构。将对象推入堆栈,然后弹出。堆是一块内存,其中的项目几乎是随机分配的。
在网络上搜索内存分配和内存池。许多实现将内存区域实现为朝向堆增长的堆栈。从堆中分配的越多,堆栈的空间就越小,反之亦然。