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

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

DDD
DDDオリジナル
2024-12-06 22:08:15724ブラウズ

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

C での使用可能なメモリの決定

メモリを大量に使用するアプリケーションを扱う場合、使用可能なメモリに応じてバッファを割り当てることが重要です。これにより、メモリ制限を超過したり、システムが不安定になったりすることなく処理を続行できるようになります。クロスプラットフォーム環境では、利用可能なメモリ情報を取得するためにプラットフォームに依存しない方法を採用する必要があります。

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

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