我的堆栈内存空间是什么警告标志,我应该在什么时候开始使用堆内存?并且,处理器之间是否存在差异,我正在考虑堆栈大小限制?
答案 0 :(得分:2)
可以在链接期间指定堆栈的大小。这样做的确切方法取决于您的工具链。除了32位与64位处理器之外,我不知道任何基于处理器的堆栈大小限制。
至于你是否使用太多,对此没有正确或错误的答案,这是一个设计问题,取决于你的要求。由于在链接期间设置了堆栈大小,因此它将比使用堆更严格地限制您的最大数据,一般来说无论如何都是如此。另一方面,堆栈分配和解除分配比使用堆快。
答案 1 :(得分:0)
您通常可以使用编译器和链接器的命令行选项来控制堆栈的大小。
您是否收到任何堆栈溢出(错误,而不是站点)?这将是一个很大的线索,你正在推动堆栈的限制。
我认为你需要首先弄清楚你的应用程序中的默认堆栈有多大,然后考虑一下你填充的内容。
答案 2 :(得分:0)
正如许多其他人所说,堆栈的大小可通过命令行选项控制。
关于堆的使用,我倾向于坚持这个:
如果我可以在程序开头动态分配类对象,我会这样做。我倾向于不动态分配或删除动态分配的对象中期运行,因为它会分割内存。
原始对象通常保留在堆栈上,因为它们的大小可以忽略不计。
答案 3 :(得分:0)
答案是......堆栈溢出!
没有臃肿的堆栈。如果你没有溢出你的堆栈,你很好,没有性能损失。如果溢出堆栈,程序将退出堆栈溢出错误。除非你递归地多次调用函数,否则很难溢出堆栈。现代操作系统上的典型默认堆栈大小为2兆字节。
每次进入函数时,都会在堆栈上分配(推送)新的堆栈帧,分配堆栈帧所需的大小是该函数中局部变量的大小加上一些开销。当您退出释放(弹出)内存的功能时。