MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
sysinfo.hpp
1#ifndef MSTL_CORE_SYSTEM_SYSINFO_HPP__
2#define MSTL_CORE_SYSTEM_SYSINFO_HPP__
3#include "../string/string.hpp"
4#include "../async/atomic.hpp"
6
7class MSTL_API sysinfo {
8public:
9 struct system_info {
10 uint32_t processor_numbers{0};
11 uint32_t page_size{0};
12 uint32_t allocation_granularity{0};
13#ifdef MSTL_DATA_BUS_WIDTH_64__
14 void* min_app_address{nullptr};
15 void* max_app_address{nullptr};
16 uint64_t active_processor_mask{0};
17#else
18 uint32_t min_app_address{0};
19 uint32_t max_app_address{0};
20 uint32_t active_processor_mask{0};
21#endif
22 uint16_t processor_level{0};
23 uint16_t processor_revision{0};
24 };
25
26 struct MSTL_API memory_info {
27 uint64_t total_physical{0};
28 uint64_t available_physical{0};
29 uint64_t total_virtual{0};
30 uint64_t available_virtual{0};
31 uint64_t total_page_file{0};
32 uint64_t available_page_file{0};
33
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);
37 }
38
39 MSTL_NODISCARD size_t available_memory() const noexcept;
40 };
41
42 struct CPU_info {
43 string vendor{};
44 string brand{};
45 uint32_t max_MHz{0};
46 uint32_t current_MHZ{0};
47 uint32_t cores{0};
48 uint32_t logical_processors{0};
49 string features{};
50
51 MSTL_NODISCARD bool hyperthreading() const noexcept {
52 return logical_processors > cores;
53 }
54 };
55
56 struct MSTL_API os_version_info {
57 uint32_t major{0};
58 uint32_t minor{0};
59 uint32_t build{0};
60 uint32_t platform_id{0};
61 string csd_version{};
62 string product_name{};
63
64 MSTL_NODISCARD string version() const;
65 };
66
67 enum class architecture {
68 UNKNOWN,
69 X86, X64,
70 ARM, ARM64,
71 IA64
72 };
73
74private:
75 system_info system_info_{};
76 memory_info memory_info_{};
77 CPU_info cpu_info_{};
78 os_version_info os_version_info_{};
79 architecture architecture_ = architecture::UNKNOWN;
80 atomic_bool initialized_{false};
81
82 sysinfo();
83 ~sysinfo() = default;
84
85 void init();
86
87public:
88 static sysinfo& instance() {
89 static sysinfo instance;
90 return instance;
91 }
92
93 sysinfo(const sysinfo&) = delete;
94 sysinfo& operator =(const sysinfo&) = delete;
95 sysinfo(sysinfo&&) = delete;
96 sysinfo& operator =(sysinfo&&) = delete;
97
98 void refresh();
99
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_; }
105
106 MSTL_NODISCARD bool is_initialized() const noexcept {
107 return initialized_.load(memory_order_acquire);
108 }
109
110 static string format_bytes(uint64_t bytes);
111 static float64_t cpu_usage();
112 static uint32_t process_count();
113};
114
116#endif // MSTL_CORE_SYSTEM_SYSINFO_HPP__
MSTL原子类型完整实现
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
原子加载操作