メモリを大量に使用するアプリケーションを扱う場合、使用可能なメモリに応じてバッファを割り当てることが重要です。これにより、メモリ制限を超過したり、システムが不安定になったりすることなく処理を続行できるようになります。クロスプラットフォーム環境では、利用可能なメモリ情報を取得するためにプラットフォームに依存しない方法を採用する必要があります。
Unix ライク システム
Unix ライク オペレーティング システムsysconf 関数を提供すると、システム構成情報を取得できます。システム メモリの合計を取得するには、次のコマンドを使用します。
#include <unistd.h> unsigned long long getTotalSystemMemory() { long pages = sysconf(_SC_PHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; }
Windows
Windows では、GlobalMemoryStatusEx 関数を使用してメモリ情報を取得できます。次のコードは、その使用方法を示しています。
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
クロスプラットフォーム実装
クロスプラットフォーム ソリューションを作成するには、条件付きコンパイルを使用して、オペレーティング システムに基づいた適切な関数:
#ifdef __unix__ unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #elif _WIN32 unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; } #endif
これにより、利用可能なデータを取得する一貫した方法が提供されます。さまざまなオペレーティング システム上のアプリケーション用のメモリ。
以上が異なるプラットフォーム間で C で利用可能なシステム メモリを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。