【发布时间】:2011-02-04 01:57:09
【问题描述】:
我正在修改一些 C++ 源代码,我注意到作者确实不遗余力地分配堆栈上的所有内容。最有可能获得解除分配的好处(是否还有任何性能好处??)。
我想保持相同的一致性,但我需要创建大量对象,例如:
Object os[1000] = {Object(arg), Object(arg), ....};
不会剪掉它。搜索它似乎是一种解决方法:
vector<Object> os(1000, Object(arg));
这仍然在堆上分配,但像堆栈一样释放(来自我在其他帖子中读到的内容)。我只是想知道还有其他选择,因为这似乎是一个语法问题。也许聪明的#define 人都知道。
【问题讨论】:
-
我的意思是这主要是在开玩笑,但也有一定的道理......有一个选择:学习如何使用指针和引用并进行设计,这样内存管理就不是问题了。
-
性能优势:堆栈分配总是 O(1);堆分配是不确定的。
-
@Mehrdad:如果您使用的是具有无限堆栈的理想计算机,它们总是 O(1)...。在现实世界中,您最终分配的内存将超过当前的堆栈限制,而操作系统将不得不为您分配更多内存……或者在最坏的情况下,您将用完可用的堆栈空间,然后您的进程就结束了。跨度>
-
@Matti:好吧,我承认我没有想到 Stack Overflow(……是的……)。但老实说,堆栈扩展是一次性事件,只要您一次分配的空间不超过 2-4 KB(大约为
PAGE_SIZE),它们显然比堆分配要快。跨度> -
@Mehrdad:他试图分配一千个不知道大小的对象。
标签: c++ arrays object constructor