-1

我有一个大约有 30 个成员的结构。我在互联网上得到了这个来源,我正在优化它(游戏模拟器的来源)。但我的问题是我一直使用这样的结构:

MY_STRUCT myStruct = {};
myStruct.a = 5;
myStruct.name = "name";
[..]

但是在这个来源上我得到了一些奇怪的东西,就像这样:

MY_STRUCT* myStruct = (MY_STRUCT*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(MY_STRUCT));

所以我的问题是,是否真的需要对结构使用堆分配,或者最好只使用初始化它{}?我使用 Visual Studio 2012 (C++)。

在性能或最佳实践方面哪个更好?

4

2 回答 2

3

您的第一个案例在堆栈上分配结构,而不是堆。这是堆栈分配,而不是动态分配。特别是您必须负责释放动态分配的对象,而堆栈分配的对象会自行清理(在 C 中,而不是 C++ 意义上)。

在性能方面,堆栈分配几乎总是比动态分配快(您只移动堆栈指针,而不是在堆中搜索和选择/注释一个平板,可能会调用 VMM),但它对对象大小和关于它的生命周期的课程。

于 2013-10-08T20:00:02.867 回答
0

优化很棘手,因为编译器可以在幕后为您优化代码。很多时候它的结果都差不多。

但是,在这种情况下,看起来第一个代码块是在堆栈上分配的,而第二个代码块是在堆上分配内存并返回一个指针,所以它实际上是在做两件不同的事情。如果您要进行堆分配,则第二个可能更快,只是因为它将所有内容都设置为0。

于 2013-10-08T20:00:10.917 回答