C++ 创建大型std::数组会导致SEGFULT吗?

C++ 创建大型std::数组会导致SEGFULT吗?,c++,linux,c++11,gcc,C++,Linux,C++11,Gcc,我想创建一个大的std::array,并用随机数据填充它。问题是,如果我声明std::array程序segfaults(GDB说它在auto start..上执行segfaults),如果我评论array声明程序运行 以下是SCSE: #include <array> #include <cstdint> #include <iostream> #include <chrono> static const constexpr size_t siz

我想创建一个大的
std::array
,并用随机数据填充它。问题是,如果我声明std::array程序segfaults(GDB说它在
auto start..
上执行segfaults),如果我评论array声明程序运行

以下是SCSE:

#include <array>
#include <cstdint>
#include <iostream>
#include <chrono>

static const constexpr size_t size = 1E7;

int main(){

    auto start = std::chrono::high_resolution_clock::now();
    std::array<uint16_t, size> random_data;
    // Here I want to fill random_data with random numbers to avoid 
    // filling memory twice
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = end-start;
    std::cout << "Elapsed sec " << elapsed.count() << std::endl;

}
#包括
#包括
#包括
#包括
静态常数constexpr size\u t size=1E7;
int main(){
自动启动=标准::时钟::高分辨率时钟::现在();
std::数组随机_数据;
//这里我想用随机数填充随机_数据,以避免
//填充内存两次
自动结束=标准::时钟::高分辨率时钟::现在();
std::chrono::持续时间=结束-开始;

std::cout您的
数组
位于堆栈上,其成员,即底层数组也位于堆栈上。但是您机器上的堆栈大概不是40兆字节大,因此您的程序崩溃

使用
向量

std::vector<std::uint16_t> random_data(size);

.

在这种情况下,您知道数组在堆栈上,对吗?您(1)需要数据连续吗(2)我需要做一些比较简单的C++和Python NUMPY执行速度的ILL,在这种情况下,我希望数据一次就需要!在另一个基准中,我会使用C++来生成一些存储数据,但是我找不到。最后我想做:<代码> AutoSuMulthRead=STD::(RealthyDATA ->开始),RealthyDATA ->(),StasyType(0),STD::PLUSER():如果你知道如何创建一个生成器对象,使我能够使用Boo/STD随机数生成器,并且可以从<代码> STD::累积< /代码>请给出提示。如果只有C++有<代码>屈服<代码>……-)我想有一天它可能会出现。我想你可以编写自己的流式迭代器。+1用于在stackoverflow上发布堆栈溢出。
std::unique_ptr<std::uint16_t[]> random_data( new std::uint16_t[size] );