分配100MB等大内存时应选择heap(堆)还是stack(栈)?
超大数组内存分配方案解答
分配区域选择结论
100MB的数组必须在堆(Heap)上分配,绝对不能使用栈(Stack)分配。
具体原因
- 栈空间有严格的容量上限:常规操作系统对单线程栈的默认分配大小只有1MB~8MB,100MB远超出栈的最大承载阈值,强行在栈上申请该大小的数组会直接触发栈溢出错误,导致程序直接崩溃。
- 堆空间容量足够支撑大内存申请:堆是进程全局共享的动态内存区域,可用容量通常和系统剩余物理内存/虚拟内存挂钩,常规场景下至少有GB级别的可用空间,完全可以容纳100MB的数组。
两种写法的适配性判断
给出的两种写法中,只有int* a = new int[10];对应的堆分配逻辑适用于该场景:
int a[10];是栈内存分配写法,属于局部自动变量,申请的内存位于栈区,虽然不需要手动释放,但仅适合小容量数组场景,完全无法支撑100MB级别的内存申请。int* a = new int[10];是堆内存分配写法,申请的内存位于堆区,只要把申请的元素个数调整为100MB对应的数量即可(100MB的int数组对应元素个数为100 * 1024 * 1024 / sizeof(int)),使用结束后需要手动调用delete[] a释放内存,避免出现内存泄漏问题。
内容的提问来源于stack exchange,提问作者Mohibur_Cou
相关产品推荐
相关产品推荐

