<分区>
如何在不返回内存不足
的情况下,获得我的应用程序可以在一次malloc
调用中分配的最大字节数(连续)? (最大可用 block )
P.S.:如果我想分配它,如果我不想分配它,我想要一个通用的答案(所以这个问题不需要重新提出)。
<分区>
如何在不返回内存不足
的情况下,获得我的应用程序可以在一次malloc
调用中分配的最大字节数(连续)? (最大可用 block )
P.S.:如果我想分配它,如果我不想分配它,我想要一个通用的答案(所以这个问题不需要重新提出)。
最佳答案
我猜你问的是(有点)现代桌面或服务器操作系统。
问题是:当返回结果时,任何答案都可能已经无效。原因是其他进程、线程、内存碎片等。 正如其他人已经在评论中所述,操作系统甚至可能报告比可用内存更多的内存 - 包括交换。这个想法是,分配的内存可能只会被进程稀疏地使用,因此只会根据需要提供实际访问的内存页面,malloc() 本身不会提前保留任何内存。
分配尽可能多的内存通常也不是一个好主意,因为这会导致过度交换或其他进程饥饿/颠簸。因此,只需分配您实际需要的内存即可。
**结论:**忘掉它吧!分配你需要的内存,不多也不少。如果您需要动态内存,请考虑像列表和树这样的动态结构或使用 realloc()
(但要慎重使用)。
旁注:
在返回 NULL 之前,不要试图增加大小来尝试分配的 block 。这很容易导致碎片,您甚至可能无法分配以前最大的 block 大小(出于与上述类似的原因)。
对于嵌入式操作系统,可能会有完全不同的答案。
关于c - 如何获得可以分配的最大可用内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30834986/