1#ifndef MSTL_CORE_SYSTEM_SYSINFO_HPP__
2#define MSTL_CORE_SYSTEM_SYSINFO_HPP__
3#include "../string/string.hpp"
7class MSTL_API sysinfo {
13#ifdef MSTL_DATA_BUS_WIDTH_64__
14 void* min_app_address{
nullptr};
15 void* max_app_address{
nullptr};
26 struct MSTL_API memory_info {
34 MSTL_NODISCARD
float64_t physical_memory_usage() const noexcept {
35 if (total_physical == 0)
return 0.0;
36 return 100.0 * (1.0 -
static_cast<float64_t>(available_physical) / total_physical);
39 MSTL_NODISCARD
size_t available_memory() const noexcept;
51 MSTL_NODISCARD
bool hyperthreading() const noexcept {
52 return logical_processors > cores;
56 struct MSTL_API os_version_info {
62 string product_name{};
64 MSTL_NODISCARD
string version()
const;
67 enum class architecture {
75 system_info system_info_{};
76 memory_info memory_info_{};
78 os_version_info os_version_info_{};
79 architecture architecture_ = architecture::UNKNOWN;
88 static sysinfo& instance() {
89 static sysinfo instance;
93 sysinfo(
const sysinfo&) =
delete;
94 sysinfo& operator =(
const sysinfo&) =
delete;
95 sysinfo(sysinfo&&) =
delete;
96 sysinfo& operator =(sysinfo&&) =
delete;
100 const system_info& get_system_info() const noexcept {
return system_info_; }
101 const memory_info& get_memory_info() const noexcept {
return memory_info_; }
102 const CPU_info& get_CPU_info() const noexcept {
return cpu_info_; }
103 const os_version_info& get_os_version_info() const noexcept {
return os_version_info_; }
104 architecture get_architecture() const noexcept {
return architecture_; }
106 MSTL_NODISCARD
bool is_initialized() const noexcept {
110 static string format_bytes(
uint64_t bytes);
atomic< bool > atomic_bool
布尔原子类型
unsigned int uint32_t
32位无符号整数类型
double float64_t
64位双精度浮点数类型
unsigned short uint16_t
16位无符号整数类型
unsigned long long uint64_t
64位无符号整数类型
MSTL_INLINE17 constexpr auto memory_order_acquire
获取内存顺序常量
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
bool load(const memory_order mo=memory_order_seq_cst) const noexcept
原子加载操作