我应该使用哪个内存(堆或堆栈)来分配像 100MB 这样的大内存?

Posted

技术标签:

【中文标题】我应该使用哪个内存(堆或堆栈)来分配像 100MB 这样的大内存?【英文标题】:Which memory (heap or stack) should I use to allocate a large memory like 100MB? 【发布时间】:2021-11-24 01:39:09 【问题描述】:

我需要一个非常大的数组(100MB),我可以在堆和堆栈上分配内存。我应该在哪里为数组分配内存,为什么?

    int a[10];
    int* a = new int[10];

我应该如何分配内存?

【问题讨论】:

程序在尝试分配“堆栈上的 100MB”时可能会崩溃。 (windows默认是1MB,linux默认是8MB..) 【参考方案1】:

堆栈通常比堆更受限制,因此,如果这是您仅有的两个选择,我会选择堆(a)

请记住,100M 可能是很多数据,具体取决于您运行的平台。如果您在使用堆时仍然达到限制(限制或只是与使用那么多内存相关的问题),您可能需要考虑某种形式的“分页”,您不必同时将整个结构保存在内存中。


(a) 以 Linux 为例,我相信 8M 可能是默认的堆栈大小。 Windows 下的链接通常将大小设置为 1M。我认为,在这两种情况下,您都可以更改它,但您必须明确地这样做。否则,使用这些默认值(假设我没有记错),有一个 em> 需要 100M 的堆栈帧可能会导致问题:-)

【讨论】:

以上是关于我应该使用哪个内存(堆或堆栈)来分配像 100MB 这样的大内存?的主要内容,如果未能解决你的问题,请参考以下文章

.NET - 存储在地址空间中的堆或堆栈上的函数变量?

数据结构之堆栈

巨大的内存分配:堆栈与堆

我应该啥时候在堆上分配? (C++)

浅谈堆栈队列

保存/使用图像而不分配 300mb 内存