1. ホーム
  2. c++

利用可能なメモリを取得する方法 C++/g++?

2023-09-10 02:55:51

質問

私は、利用可能なメモリに応じてバッファを割り当てたいと思います。そのような場合、私が処理を行い、メモリ使用量が増加しても、まだ利用可能なメモリの制限内にとどまります。利用可能なメモリを取得する方法はありますか (私は、仮想または物理メモリのステータスが違いを生むかどうかわかりません?)。Windows、OS X、Linux、AIXで使用する予定なので、方法はプラットフォームに依存しないものでなければなりません。(そして、可能であれば、私はまた、私のアプリケーションのために利用可能なメモリの一部を割り当てたいと思います、それが実行中に変更されない誰か)。

編集:私は、設定可能なメモリ割り当てでそれをしました。 ほとんどの OS は私たちのためにメモリを管理するので、それが良い考えでないことは理解していますが、私のアプリケーションは ETL フレームワーク (サーバー上で使用することを意図していましたが、Adobe indesign のプラグインとしてデスクトップ上でも使用されていました) でありました。そのため、スワップを使用する代わりに、Windowsがbad allocを返し、他のアプリケーションが失敗し始めるという問題にぶつかっていました。そして、私はクラッシュを避けるように教えられたので、ちょうど優雅に低下しようとしていました。

どのように解決するのですか?

これらの回答を読んで、OP のコンピュータ メモリは他人のものであるというスタンスをとる人がこれほど多いことに驚かされました。それは 彼の コンピュータであり 彼の たとえそれが他のシステムを壊してしまうとしても。それは興味深い質問です。もっと原始的なシステムで、私は memavail() を持っていて、それは私にこう教えてくれるでしょう。なぜ、他のシステムを混乱させることなく、OP が望むだけのメモリーを取ってはいけないのでしょうか?

親切心から、利用可能なメモリの半分以下を割り当てる解決策を紹介します。出力は

必要な FFFFFFFF

必須 7FFFFFFF

必須 3FFFFFFF

割り当てられたメモリサイズ=1FFFFFFFF

#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;
}