利用可能なメモリを取得する方法 C++/g++?
質問
私は、利用可能なメモリに応じてバッファを割り当てたいと思います。そのような場合、私が処理を行い、メモリ使用量が増加しても、まだ利用可能なメモリの制限内にとどまります。利用可能なメモリを取得する方法はありますか (私は、仮想または物理メモリのステータスが違いを生むかどうかわかりません?)。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;
}
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み] Androidでアプリケーションのメモリ使用量を確認するにはどうすればよいですか?
-
[解決済み】ローカル変数のメモリはスコープ外からアクセスできる?
-
[解決済み】Rのセッションで使用可能なメモリを管理するトリック
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない