メモリ割り当てを使用可能なシステム リソースに適応させる必要があるシナリオでは、メモリ割り当てが使用可能なメモリの量を決定する必要があります。実行時のアプリケーション。この記事では、Windows、macOS、Linux、AIX 上でプラットフォームに依存せずに使用可能なメモリを取得する方法について説明します。
sysconf 関数は、メモリ情報を含むシステム構成パラメータを取得するための標準化された方法。以下のコードは、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 では、GlobalMemoryStatusEx 関数により、合計物理メモリを含むメモリ使用量に関する詳細情報が提供されます:
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
この情報をアプリケーションで使用するには、利用可能なメモリを返すクロスプラットフォーム関数:
#ifdef WIN32 unsigned long long getTotalSystemMemory() { return GlobalMemoryStatusEx(); } #else unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #endif
その後、利用可能なメモリに基づいてバッファを割り当てることができます:
void allocateBuffers() { unsigned long long availableMemory = getTotalSystemMemory(); // Allocate buffers according to `availableMemory` }
仮想メモリと物理メモリの概念は異なる場合があることに注意してください。はプラットフォームやオペレーティング システムによって異なるため、ターゲット システムごとに正しい関数を使用することが重要です。
以上が異なるプラットフォーム間で C で使用可能なシステム メモリを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。