如何找出堆栈内存中适合的数组大小
How to find out what size array fits in stack memory?
我的印象是,在进行时
void stuff() {
int arr[1000];
//do some stuff
}
然后,根据数组的大小和CPU的限制,可以在堆内存或堆栈内存中分配数组。
我正在优化一个脚本,该脚本对一些计算进行了粗略的测试,由于估计的时间目前为几周,我希望尽可能减少,我认为在堆栈中放入尽可能多的样本数据会有所帮助。
有没有一种方法可以找出我可以声明的数组的大小?
典型的现代机器上的堆栈各不相同,但通常在5MB左右/以下。在嵌入式平台上,可能要少得多。一些平台允许为创建的线程的堆栈大小指定提示,但通常这些只是提示,并没有严格遵守。
此外,你放在堆栈上的对象有多大取决于当前堆栈的深度,你可以在堆栈的开头或接近它的结尾。你真的不能提前知道,我的意思是在编码时,也就是在何时何地指定堆栈数组的大小。在一个琐碎的例子中,您可以假设您将处于堆栈的开头,但在生产代码中,函数调用可能以难以预测的顺序和深度嵌套,如果它们依赖于用户输入,则甚至是不可能的。
我不知道是否有任何可移植的方法,但特定于平台的方法是将对象放在堆栈上,并测量其地址和堆栈末尾之间的差异,这将在运行时为您提供剩余的堆栈空间。
无论如何,如果你的意图是在堆栈上放置一个大对象,那么不使用堆内存分配并不会给你带来太多好处,内存分配带来的损失可以忽略不计,而且之后,从中访问数据的速度将与在堆栈上一样快,还有一个好处,那就是它将不依赖于有限的堆栈大小。
堆栈的目的不是存储程序的大容量数据,而是跟踪程序的核心结构,使其能够运行。永远不要将大容量数据放在堆栈上。由于这种意图,堆栈大小几乎总是不超过几兆字节,即使对于打算使用千兆字节ram内存的应用程序也是如此。
相关文章:
- 从文件中读取数组没有给出正确的值?
- 重载运算符 [] 用于从对象数组中给出特定索引
- 我的旋转数组代码给出了大数组大小的错误
- 在 int 数组中打印出位
- 在类中使用动态数组会给出错误
- 为什么在这个动态数组中抛出异常
- 在计算卡特兰数时无法找出错误
- 服务器未收到UDP数据包,花费数小时试图找出问题所在
- 给定一个N个数的数组,求出所有长度的序列在R范围内的个数
- 向量的向量,从数组中分离出不同的值
- 在 N 个元素的数组中求出"P"元素的最小和,以便一起选择不超过"k"个连续元素
- 从庸医(队列/堆栈)中包含的圆形数组顶部弹出一个项目
- 如何通过指针输入整数数组并打印出数组和数组的大小(C++)
- 指针数组没有给出正确的输出
- 动态创建数组 - 无法推断出"T"的模板参数 - C++
- c++中创建数组时抛出的异常
- 如何使用for循环从数组中打印出交替的信息
- 为什么大型静态数组会给出段错误,而动态数组不会?(C++)
- 给定一个整数数组,找出两个数字,使它们加起来等于一个特定的目标数
- ld:在结构数组上找不到体系结构x86_64错误的符号