【发布时间】:2013-03-15 15:19:27
【问题描述】:
这是两个重叠的问题——我希望尝试将 alloca() 用于大型数组,而不是在堆上分配动态大小的数组。这样我就可以提高性能而不必进行堆分配。但是,我得到的印象堆栈大小通常很小?增加堆栈大小以便我可以充分利用 alloca() 是否有任何缺点?是不是我拥有的 RAM 越多,我的堆栈大小就可以按比例增加越大?
EDIT1:最好是 Linux
EDIT2:我没有指定尺寸 - 我更想知道如何判断是什么决定了限制/边界。
【问题讨论】:
-
alloca的一个缺点是它不能检测分配失败。如果您尝试分配过多的堆栈空间,则行为未定义,您的程序可能会崩溃。 -
@KeithThompson - 使用 Linux
malloc并没有更好,只要您在完整地址空间内请求一个数量,它几乎总是返回一个有效指针。在最近的一次测试中,我能够成功请求 137435723384 kB,然后我得到一个 NULL 回复(!)。 -
@teppic:这是 Linux 上的默认行为。但是,如果您愿意,您可以打开一致的(即“健全的”)行为。
标签: c++ c performance memory memory-management