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

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

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

我应该如何分配内存?

【问题讨论】:

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

标签: arrays memory heap-memory allocation stack-memory


【解决方案1】:

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2011-05-28
    • 2018-07-24
    • 1970-01-01
    • 2011-10-09
    • 2014-10-26
    相关资源
    最近更新 更多