Chr*_*isW 13
当您使用允许您对非常大的对象使用自动分配的语言进行编程时...
如果我想分配一个非常大的对象,那么我可能不会在堆栈上分配它而是包装在堆中auto_ptr(在这种情况下,当它超出范围时它将被释放,就像堆栈驻留对象一样,但不必担心堆栈大小).
...你何时以及如何担心堆栈大小?
我保守地使用堆栈的习惯(例如,在堆上分配大于大约512字节的任何对象),我知道堆栈有多大(例如默认大约一兆字节),因此知道我没有需要担心它.
关于堆栈大小的推理是否有任何经验法则?
你何时开始担心堆栈大小
如果您正在编写一个小小的嵌入式平台,那么您一直担心它,但您也确切地知道它有多大,并且可能有一些有用的工具可用于找到堆栈的高水位标记.
如果你不是,那么在你的程序崩溃之前不要担心:)除非你分配严重的大对象(几十KB),否则它永远不会成为问题.
但请注意,根据定义,堆栈上的对象是临时的.经常构造(并且可能破坏)大型对象可能会导致性能问题 - 因此,如果您有一个大型对象,它可能应该是持久性的并且基于堆的,而不是堆栈大小.
小智 4
我从不担心。如果有堆栈溢出,我很快就会知道。此外,在 C++ 中,实际上很难在堆栈上创建非常大的对象。唯一的方法是:
struct S {
char big[1000000];
};
Run Code Online (Sandbox Code Playgroud)
但使用 std::string 或 std::vector 可以解决这个问题。