【发布时间】:2014-11-05 18:45:33
【问题描述】:
我正在为游戏和实时应用程序编写一个通用框架,使用 gcc 编译。为了提高效率,我希望核心框架结构的所有实例都分配在堆栈上。
根据使用框架构建的项目的大小,似乎在某些情况下堆栈大小可能需要从典型的默认值(1-2 MB?)增加。
可以在 gcc 支持的所有平台上更改堆栈大小吗?操作系统中是否存在阻止堆栈大小增加的硬限制?增加堆栈大小(包括使用多线程时)是否还面临其他典型问题?
【问题讨论】:
-
如果你有超过 2 Mb 的数据结构,你可能会在静态内存中分配一些,如果不是大部分的话,非常大的东西通常不会继续堆栈。
-
从内存访问的角度来看,没有什么可以使堆栈“更快”;分配和取消分配很便宜,因为 allocate 是“增量指针”,而 deallocate 是“减量指针”。对于您分配一次并跨框架重复使用的东西,这样做对您没有任何好处。
-
@BillyONEal 也完全正确。重新阅读您自己的链接,它明确表示在答案中堆栈内存访问没有没有速度优势。
-
您误读了这些答案。堆栈内存和堆内存完全相同同步问题,后分配(这些答案只是说 malloc 本身必须是原子的,不是内存读取)。要么您不共享内存,在这种情况下没有问题,或者您正在共享内存,在这种情况下您还必须同步堆栈。这不是魔术。如果您是批量分配,连续性也不是问题。
-
伙计们,OP 是对的,这里不适合讨论。发布问题/去聊天/等等。
标签: c gcc memory-management