我有一个静态的常量变量,是一个std::vector,如下所示:
std::vector<std::pair<GUID, std::array<double, 13>>>
我也尝试过(理论上向量占用更少的内存):
std::unordered_map<GUID, std::array<double, 13>, HashGUID >
std::map<GUID, std::array<double, 13>, GUIDComparer >
我在程序开始时使用初始化列表将其初始化,大约使用了5400个项。我知道这似乎有点大,但这并不算奇怪。这只是一个临时/中间解决方案。
然而,它总是抛出以下错误:
0xC00000FD:堆栈溢出(参数:0x00000000,0x00052000)。
如果我将列表保持较小,约为4000,则似乎可以正常工作,但我的完整列表5400就无法正常工作。有任何想法吗?
编辑: 这是我的初始化方式(其中4000左右的行都很好用。超过5400就不行):
static const std::vector<std::pair<GUID, std::array<double, 13>>> engVals={
{{0x58341899, 0x8844, 0x3333, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}}, {11, 101, 1.50, 3.50, 225.0, 850.0, 125.0,0.55, 19, 175, 565, 1.2, 0.44}},
{{0x67633448, 0x8103, 0x3333, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}}, {11, 102, 1.50, 3.50, 475, 1300.0, 275.0, 0.55, 19, 175, 565, 1.2, 0.44}},
{{0x94422980, 0x6497, 0x3333, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}}, {11, 103, 1.50, 3.50, 875.0, 1600.0, 500.0, 0.55, 19, 175, 565, 1.4, 0.51}},
...
};
编辑2 忘记说明,我在使用vs2013。这段代码实际上在编译为dll的库中。
我需要一个初始化列表,因为上面的初始化将由另一个应用程序生成,所以我需要一种一行方式来初始化这个容器。
vector
中而不是array
中? - Yakk - Adam Nevraumontconstexpr
,我怀疑它需要在运行时(初始化时)构造initializer_list
,因此需要堆栈空间。 - dyp