C++ 堆内存上的结构
这个问题最近在一次采访中被问到,我对此感到困惑C++ 堆内存上的结构,c++,c,memory-management,C++,C,Memory Management,这个问题最近在一次采访中被问到,我对此感到困惑 “如何初始化堆内存中的结构?” 谁能告诉我这个问题的正确答案吗 顺便问一下:堆栈内存和堆内存的区别到底有多大? 关于上面的问题,有些人可能还会问我关于如何初始化堆栈内存上的结构? 这可能是一个基本问题,也可能是一个错误的问题,但我只是好奇地想知道 有人能帮忙吗?堆栈用于分配局部变量,堆用于动态分配内存,如malloc()。在这两种情况下,您都需要确保您已经初始化了您的结构。您可以使用类似calloc()的方法从堆中分配内存,从而自动将其归零(mal
“如何初始化堆内存中的结构?”
谁能告诉我这个问题的正确答案吗
顺便问一下:堆栈内存和堆内存的区别到底有多大?
关于上面的问题,有些人可能还会问我关于如何初始化堆栈内存上的结构?
这可能是一个基本问题,也可能是一个错误的问题,但我只是好奇地想知道
有人能帮忙吗?堆栈用于分配局部变量,堆用于动态分配内存,如malloc()。在这两种情况下,您都需要确保您已经初始化了您的结构。您可以使用类似calloc()的方法从堆中分配内存,从而自动将其归零(malloc不会)。堆栈上的变量也没有初始化(如果内存服务)。 堆栈的生命周期与函数实例定义的长度一样长——当函数返回时,内存可以自由回收(如果它保存了一个适当的C++对象W/Beavror和所有的DDOR都将被调用)。堆在显式释放之前一直有效
“如何初始化一个结构”(无论在哪种内存上)——都是一个特殊的问题——显然是通过它在C++中自动调用的cTor(如果有的话),其他代码有一个<代码> MeMCPY < /C> >——在堆栈或堆中,这里没有区别。
struct MyStruct
{
int foo;
int bar;
};
...
struct MyStruct* baz = malloc(sizeof(MyStruct));
您现在可以使用
baz
,但其成员foo和bar的值尚未定义。以下是我对采访问题的回答:
如何初始化堆内存中的结构?
calloc
,
虽然这会为每个指定零
字节,对于某些对象,这可能不是
说对了在web上搜索内存分配和内存池。许多实现将内存区域实现为朝堆方向增长的堆栈。从堆中分配的空间越多,堆栈的空间就越小,反之亦然。重复,例如@gf它不是重复的,因为它不包含向我提出的问题!!它归结为几乎相同的问题,我相信你会找到更好的匹配,如果你愿意搜索一点。我做了搜索,但可以找到我的问题的确切答案,这使我问这个问题。暧昧:C和C++有不同的答案。CalLoor()初始化内存到所有位0。它不会初始化结构。特别是空指针不一定是所有的位0,我有一个旧的DOS编译器,其中NULL是所有的位。是的,当然,你是正确的,我假设初始化= =设置为零。在C++中,你也可以使用<代码>新< /Cord>运算符来执行对象构造函数。构造函数是初始化对象的地方。它为结构分配内存,但不初始化字段。问题是关于结构是否已经堆上的问题。我认为更好的答案是在函数(C++)或构造函数(C++)中单独地初始化每个字段。但是,在c中使用多个赋值还是memcpy/memset/&c并不取决于堆与堆栈的区别(在堆栈上,您可以在变量定义中进行
={…}
初始化,在堆上,您不能:可能是它们的意思)。