我想在 sgx enclave 中迁移PageRank算法。该算法使用向量来保存边缘关系和矩阵。
vector<size_t> num_outgoing; // number of outgoing links per column
vector< vector<size_t> > rows; // the rowns of the hyperlink matrix
map<string, size_t> nodes_to_idx; // mapping from string node IDs to numeric
map<size_t, string> idx_to_nodes; // mapping from numeric node IDs to string
vector<double> pr; // the pagerank table
当存储少于 9000 条边时,应用程序运行良好。一旦增加到 10000 个或更多边,应用程序就会崩溃,并抛出未处理的异常enter image description here 。我也在飞地外运行相同的代码,它在存储 90000 条边时运行良好。
通过调试,我发现应用程序在以下位置失败。
if (rows.size() <= max_dim) {
max_dim = max_dim + 1;
rows.resize(max_dim);
if (num_outgoing.size() <= max_dim) {
num_outgoing.resize(max_dim);
}
}
但是,一旦变量 'rows' 拥有 13896 个元素,就不能将其调整得更大。我很困惑“行”只占用大约 300kb,而“num_outgoing”只占用大约 100kb。它远小于允许的大小。enclave 应用程序总共有 128MB 空间。
我的飞地配置文件如下所示。我尝试更改 StackMaxSize 的值,但是,它似乎没用。
<EnclaveConfiguration>
<ProdID>0</ProdID>
<ISVSVN>0</ISVSVN>
<StackMaxSize>0x400000</StackMaxSize>
<HeapMaxSize>0x100000</HeapMaxSize>
<TCSNum>1</TCSNum>
<TCSPolicy>1</TCSPolicy>
<DisableDebug>0</DisableDebug>
<MiscSelect>0</MiscSelect>
<MiscMask>0xFFFFFFFF</MiscMask>
<EnableKSS>0</EnableKSS>
<ISVEXTPRODID_H>0</ISVEXTPRODID_H>
<ISVEXTPRODID_L>0</ISVEXTPRODID_L>
<ISVFAMILYID_H>0</ISVFAMILYID_H>
<ISVFAMILYID_L>0</ISVFAMILYID_L>
</EnclaveConfiguration>
输入边沿的格式如下所示。第一个数字是“from”节点,第二个数字是“to”节点
1 0
2 0
3 1
4 3
5 4
6 0
7 1
8 0
9 1
10 0
我想知道如何配置飞地以使其允许更大的向量变量?win10和ubuntu都存在这个问题。