作者:idc01 | 来源:互联网 | 2023-02-01 21:02
我的代码:
#include
#include
using namespace std;
array, 1000 > largeThing;
array, 1000 > functionFoo() {
return largeThing;
}
void main(){
functionFoo();
return;
}
如果我运行这个我得到一个Stackoverflow错误.我到目前为止,其原因是functionFoo()的返回类型很大,因为返回值实际上是在堆上.
题:
如何使用具有大型返回类型的函数,以便函数将放在堆栈上的所有内存都放在堆上?
编辑:
我刚刚增加了stacksize,它运行正常.
1> zett42..:
std::array
在堆栈上分配,这取决于您的构建设置可能相对较小(典型大小为1 MiB).
如果你需要更大的东西,你可以在堆上显式分配该数组并返回一个指针.在std::unique_ptr
本例中为一个智能指针当指针超出范围是负责释放的,所以我们不必记住调用delete
.
using bigarray = std::array, 1000 >;
std::unique_ptr functionFoo() {
return std::make_unique();
}
另一种方法是使用已经在堆上管理内存的不同类,例如std::vector
:
std::vector > functionFoo() {
std::vector > largeThing( 1000, std::vector( 1000 ) );
return largeThing;
}
2> MSalters..:
到目前为止,最简单的解决方案是使用vector
而不是array
.这将使用std::allocator
aka"堆".