You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大EPC内存环境下SGX Enclave抛出cxxrt::bad_alloc的问题求助

SGX Enclave 内存分配受限问题排查与解决

我在SGX enclave中运行以下测试代码,验证enclave可分配的内存上限:

void test_enclave_size() {
    unsigned int i = 0;
    const unsigned int MB = 1024 * 1024; 
    try {
        for (; i < 10000; i++) {
            char* tmp = new char[MB];
        }
    } catch (const std::exception &e) { 
        std::cout << "Crash with " << e.what() << " " << i << std::endl;
    }
}

现象

在配备128MB EPC的开发机上,代码分配到118MB时抛出cxxrt::bad_alloc异常,这符合预期——标准配置下仅96MB内存保证可供enclave程序使用。但在拥有192GB EPC内存的Azure Standard_DC32s_V3虚拟机上运行时,结果完全一致,无法分配超过118MB的内存,与大EPC可支持更大内存分配的预期不符。

初始猜测

我最初怀疑的原因包括:

  • 尽管EPC总容量达192GB,但单个enclave进程仍被限制在128MB
  • 需要调整内核设置才能利用大EPC内存
  • 误解了Azure虚拟机的规格说明

解决方案

最终排查发现,问题根源在于enclave配置文件限制了最大堆大小(默认设置为约118MB),调整该配置值后即可正常分配更大内存。

额外说明

  • Linux系统下SGX驱动支持内存分页,若可接受分页带来的性能开销,enclave可使用任意大小的内存
  • 若使用Open Enclave SDK,需编辑对应的enclave配置文件来调整堆内存上限

内容的提问来源于stack exchange,提问作者JRose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:25:34