c - 如何获得可以分配的最大可用内存块?

标签 c memory memory-fragmentation

<分区>

如何在不返回内存不足的情况下,获得我的应用程序可以在一次malloc调用中分配的最大字节数(连续)? (最大可用 block )

P.S.:如果我想分配它,如果我不想分配它,我想要一个通用的答案(所以这个问题不需要重新提出)。

最佳答案

我猜你问的是(有点)现代桌面或服务器操作系统。

问题是:当返回结果时,任何答案都可能已经无效。原因是其他进程、线程、内存碎片等。 正如其他人已经在评论中所述,操作系统甚至可能报告比可用内存更多的内存 - 包括交换。这个想法是,分配的内存可能只会被进程稀疏地使用,因此只会根据需要提供实际访问的内存页面,malloc() 本身不会提前保留任何内存。

分配尽可能多的内存通常也不是一个好主意,因为这会导致过度交换或其他进程饥饿/颠簸。因此,只需分配您实际需要的内存即可。

**结论:**忘掉它吧!分配你需要的内存,不多也不少。如果您需要动态内存,请考虑像列表和树这样的动态结构或使用 realloc()(但要慎重使用)。

旁注:

在返回 NULL 之前,不要试图增加大小来尝试分配的 block 。这很容易导致碎片,您甚至可能无法分配以前最大的 block 大小(出于与上述类似的原因)。


对于嵌入式操作系统,可能会有完全不同的答案。

关于c - 如何获得可以分配的最大可用内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30834986/

相关文章:

c++ - boost multi_index_container 和内存碎片

C 反转字符串不起作用

c - forkN的作用是什么?

c - 如何从 C 代码中找到 kernel.shmmax 的值

linux - 如何测量 Linux 中 OpenMP 代码的内存使用情况?

python - 强制丢弃 Python Imaging Library 图像以回收内存

c - 如何在没有 MSYS2 的情况下在 Windows 上构建 GTK+3 程序?

ios - 内存增长之谜(Objective-C)

c - 内存碎片

java - 了解 Hotspot JVM 进程的内部碎片属性