最近在一次面试中,有人问了我一个问题,让我感到困惑!
“如何在堆内存中初始化结构?”
请问有人能告诉我正确的答案吗?
顺便问一下:栈和堆内存有什么区别?
对于上述问题,有些人可能会问我“如何在栈内存中初始化结构?”
。
也许这是一个基本的问题,或者可能是一个错误的问题,但我只是好奇想知道!
有人能帮忙吗?
最近在一次面试中,有人问了我一个问题,让我感到困惑!
“如何在堆内存中初始化结构?”
请问有人能告诉我正确的答案吗?
顺便问一下:栈和堆内存有什么区别?
对于上述问题,有些人可能会问我“如何在栈内存中初始化结构?”
。
也许这是一个基本的问题,或者可能是一个错误的问题,但我只是好奇想知道!
有人能帮忙吗?
堆栈用于分配局部变量,若你需要动态分配内存,例如使用malloc(),则需要使用堆。无论哪种情况,都需要确保先初始化结构。可以使用calloc()从堆中分配内存并自动将其清零(而malloc不会)。另外,如果我没有记错,堆栈上的变量也未初始化。
new
运算符来执行对象的构造函数。构造函数是对象初始化的地方。 - Thomas Matthews堆栈的生命周期与定义它的函数实例完全相同--当该函数实例返回时,该内存可供回收(如果它是一个适当的C++对象并且具有析构函数,那么将调用该析构函数)。堆存储器一直存在,直到明确释放。
“如何初始化结构体”(无论在哪种类型的内存中!)是一个奇特的问题--显然通过其自动调用的C++构造函数(如果有),否则使用memcpy
或类似方法--在堆栈或堆上没有区别。
struct MyStruct
{
int foo;
int bar;
};
...
struct MyStruct* baz = malloc(sizeof(MyStruct));
baz
,但其成员变量 foo 和 bar 的值未定义。这是我对面试问题的回答:
如何在堆内存中初始化结构体?
calloc
,但是这会将每个字节都赋值为零,对于某些对象来说可能不正确。至于堆和栈之间的区别,栈是一种先进先出的数据结构。对象被推入栈中,然后弹出。堆是一块内存,其中的项几乎是随机分配的。
搜索网络上的内存分配和内存池。许多实现将内存区域实现为向堆增长的栈。您从堆中分配的越多,栈的空间就越少,反之亦然。