ホームページ >バックエンド開発 >C++ >異なるプラットフォーム間で C で使用可能なシステム メモリを取得するにはどうすればよいですか?

異なるプラットフォーム間で C で使用可能なシステム メモリを取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-30 13:16:15564ブラウズ

How Can I Retrieve Available System Memory in C   Across Different Platforms?

C /g で使用可能なメモリを取得する

メモリ割り当てを使用可能なシステム リソースに適応させる必要があるシナリオでは、メモリ割り当てが使用可能なメモリの量を決定する必要があります。実行時のアプリケーション。この記事では、Windows、macOS、Linux、AIX 上でプラットフォームに依存せずに使用可能なメモリを取得する方法について説明します。

UNIX 系システム (Linux、macOS、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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。