如何获得可用内存 C /g ?

新手上路,请多包涵

我想根据可用内存分配我的缓冲区。这样,当我进行处理时,内存使用率上升,但仍处于可用内存限制中。有没有办法获得可用内存(我不知道虚拟或物理内存状态会有所不同吗?)。方法必须是平台独立的,因为它将在 Windows、OS X、Linux 和 AIX 上使用。 (如果可能的话,我还想为我的应用程序分配一些可用内存,在执行期间它不会改变)。

编辑:我用可配置的内存分配做到了。我知道这不是一个好主意,因为大多数操作系统为我们管理内存,但我的应用程序是一个 ETL 框架(打算在服务器上使用,但也作为 Adobe indesign 的插件在桌面上使用)。所以,我遇到了问题,因为 Windows 不使用交换,而是返回错误的分配,其他应用程序开始失败。正如我被教导要避免崩溃等等,我只是试图优雅地降级。

原文由 theCakeCoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 506
2 个回答

通读这些答案后,我很惊讶有这么多人认为 OP 的计算机内存属于其他人。这是 他的 电脑和 认为合适的记忆,即使它破坏了其他系统的要求。这是一个有趣的问题。在一个更原始的系统上,我有 memavail() 这会告诉我这一点。为什么 OP 不应该在不扰乱其他系统的情况下占用尽可能多的内存?

这是一个分配不到一半可用内存的解决方案,只是为了善良。输出是:

需要 FFFFFFFF

需要 7FFFFFFF

需要 3FFFFFFF

分配的内存大小 = 1FFFFFFF

 #include <stdio.h>
#include <stdlib.h>

#define MINREQ      0xFFF   // arbitrary minimum

int main(void)
{
    unsigned int required = (unsigned int)-1; // adapt to native uint
    char *mem = NULL;
    while (mem == NULL) {
        printf ("Required %X\n", required);
        mem = malloc (required);
        if ((required >>= 1) < MINREQ) {
            if (mem) free (mem);
            printf ("Cannot allocate enough memory\n");
            return (1);
        }
    }

    free (mem);
    mem = malloc (required);
    if (mem == NULL) {
        printf ("Cannot enough allocate memory\n");
        return (1);
    }
    printf ("Memory size allocated = %X\n", required);
    free (mem);
    return 0;
}

原文由 Weather Vane 发布,翻译遵循 CC BY-SA 3.0 许可协议

有理由在 HPC 中为科学软件执行此操作。 (不是游戏、网络、商业或嵌入式软件)。科学软件通常会通过 TB 的数据来完成一次计算(或运行)(并运行数小时或数周)——所有这些都不能存储在内存中(如果有一天你告诉我 TB 是任何 PC 的标准)或平板电脑或手机,科学软件将有望处理 PB 或更多)。内存量也可以决定有意义的方法/算法类型。用户并不总是想决定记忆和方法——他/她还有其他事情要担心。所以程序员应该很好地了解什么是可用的(4Gb 或 8Gb 或 64Gb 或大约这些天)来决定一种方法是否会自动工作或选择一种更费力的方法。使用磁盘,但最好使用内存。并且不鼓励此类软件的用户在运行此类软件时在他们的计算机上做太多事情——事实上,他们经常使用专用机器/服务器。

原文由 Paresh M 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题