Dam*_*ian 10 c c++ stack memory-management
我需要在调用ac函数之前实例化一个char [16384]缓冲区.函数返回后,我将读取它的某些部分并将其丢弃.
可以在堆栈上分配它还是应该使用堆?
编辑:我会添加一些信息.代码将在几个平台上运行,从PC到iPhone,我猜堆栈空间不会那么大,但我不知道.
Jar*_*Par 15
很难对这个问题给出肯定的肯定或否定,因为答案高度依赖于您的环境,并且在程序的哪个阶段调用分配内存的函数.
就个人而言,如果我在代码审查中看到这一点,我会举起一面红旗.这是用于基于堆栈的缓冲区的大量内存.今天它可能在你正在使用它的非常具体的地方工作但是明天当你用一个比你更大的堆栈调用时呢?或者当客户遇到您未考虑的情景时?
但就像我说它依赖于场景一样,它可能适合您的特定场景.你的问题根本没有足够的细节说是或否
除非你是为嵌入式系统编程,可能是从主线程以外的线程运行的代码,或者是递归调用的代码,否则我会说16k在你可以在堆栈上分配的合理大小内.
至于线程,如果你正在使用POSIX线程并希望你的程序是可移植的,你可以使用pthread_attr_setstacksize接口来指定你的线程所需的堆栈空间量,然后只要你知道调用模式和高估选择尺寸的好处,你可以肯定它是安全的.
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |