我有一个约有30个成员的结构。我在互联网上获得了这个来源并且我正在优化它(游戏模拟器的来源)。但我的问题是我一直使用这样的结构:
MY_STRUCT myStruct = {};
myStruct.a = 5;
myStruct.name = "name";
[..]
但是在这个来源上我得到了一些奇怪的东西,比如:
MY_STRUCT* myStruct = (MY_STRUCT*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(MY_STRUCT));
所以我的问题是,是否真的需要为结构使用堆alloc,或者最好只使用{}
初始化它?我使用Visual Studio 2012(C ++)。
在性能或最佳实践方面哪个更好?
答案 0 :(得分:3)
您的第一种情况是在堆栈上分配结构,而不是堆。这是堆栈分配,而不是动态分配。特别是你必须承担释放动态分配对象的责任,而堆栈分配的对象本身就会被清除(在C语言中,而不是C ++语言中)。
性能方面,堆栈分配几乎总是比动态分配更快(您只移动堆栈指针而不是搜索和选择/注释堆中的slab,可能调用VMM)但它对对象设置了一些限制大小,当然还有它的生命周期。
答案 1 :(得分:0)
优化很棘手,因为编译器可以在幕后做很多事情来为您优化代码。很多时候它都是一样的。
但是,在这种情况下,看起来第一个代码块是在堆栈上分配的,而第二个是在堆上分配内存并返回一个指针,所以它实际上做了两件不同的事情。如果它是你的堆分配,第二个可能更快,只是因为它将所有内容设置为0。