sysconf()函式應用舉例:檢視CPU及記憶體資訊
#include <stdio.h>
#include <unistd.h>
#define ONE_MB (1024 * 1024)
int main (void)
{
long num_procs;
long page_size;
long num_pages;
long free_pages;
long long mem;
long long free_mem;
num_procs = sysconf (_SC_NPROCESSORS_CONF);
printf ("CPU 個數為: %ld 個\n", num_procs);
page_size = sysconf (_SC_PAGESIZE);
printf ("系統頁面的大小為: %ld K\n", page_size / 1024 );
num_pages = sysconf (_SC_PHYS_PAGES);
printf ("系統中物理頁數個數: %ld 個\n", num_pages);
free_pages = sysconf (_SC_AVPHYS_PAGES);
printf ("系統中可用的頁面個數為: %ld 個\n", free_pages);
mem = (long long) ((long long)num_pages * (long long)page_size);
mem /= ONE_MB;
free_mem = (long long)free_pages * (long long)page_size;
free_mem /= ONE_MB;
printf ("總共有 %lld MB 的實體記憶體, 空閒的實體記憶體有: %lld MB\n", mem, free_mem);
return (0);
}
#include <unistd.h>
#define ONE_MB (1024 * 1024)
int main (void)
{
long num_procs;
long page_size;
long num_pages;
long free_pages;
long long mem;
long long free_mem;
num_procs = sysconf (_SC_NPROCESSORS_CONF);
printf ("CPU 個數為: %ld 個\n", num_procs);
page_size = sysconf (_SC_PAGESIZE);
printf ("系統頁面的大小為: %ld K\n", page_size / 1024 );
num_pages = sysconf (_SC_PHYS_PAGES);
printf ("系統中物理頁數個數: %ld 個\n", num_pages);
free_pages = sysconf (_SC_AVPHYS_PAGES);
printf ("系統中可用的頁面個數為: %ld 個\n", free_pages);
mem = (long long) ((long long)num_pages * (long long)page_size);
mem /= ONE_MB;
free_mem = (long long)free_pages * (long long)page_size;
free_mem /= ONE_MB;
printf ("總共有 %lld MB 的實體記憶體, 空閒的實體記憶體有: %lld MB\n", mem, free_mem);
return (0);
}
http://www.groad.net/bbs/read.php?tid-1487.html
http://www.groad.net/bbs/read.php?tid-1485.html
使用 sysconf() 函式確定可配置的系統變數的值。
原型是:
sysconf() 返回選項 (變數) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回變數的當前值。該值受到的限制將少於編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些變數的值在呼叫程式的生存時間內不變。
如果出錯,那麼函式返回 -1 ,並適當地設定 errno 。當沒有錯誤發生時, -1 也是一個合法的返回值。因此,程式要檢查錯誤,應該在呼叫 sysconf() 之前將 errno 設定為 0 ,然後,如果返回 -1,則檢驗到錯誤。
引數 name 指定我們感興趣的執行時限制的名字,它必須是以值中之一(除非另有說明,否則返回值都是整數):
... .... 待補充 ... ...
使用 sysconf() 函式時,必須注意:
1、CLK_TCK 的值是可變的,因此,不應該假設它是一個編譯時間常量。
2、呼叫 setrlimit 會使 OPEN_MAX 的值發生改變。
3、 通過將 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,來確定實體記憶體的總量 (以位元組為單位) 可以返回一個值,該值超出 32 位程式中 long 或 unsigned long 可表示的最大值。同樣適用於通過將 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,來確定未使用的實體記憶體的總量 (以位元組為單位)。這個問題有兩個工作區。第 1 個工作區將程式作為 64 位的程式進行編譯 (從而使 long 足夠大到可以容納乘法運算的結果) ,但是,這樣做的缺點是得到的程式只能在 64 位的核心中執行。第 2 個工作區是用來將得到的乘法運算結果儲存在一個 64 位的量中,如 longlong_t (Solaris OS 型別) 或 long long (linux)。它的有點是可以在 32 位和 64 位的核心中正確工作。
原型是:
引用#include <unistd.h>
long sysconf (int name);
sysconf() 返回選項 (變數) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回變數的當前值。該值受到的限制將少於編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些變數的值在呼叫程式的生存時間內不變。
如果出錯,那麼函式返回 -1 ,並適當地設定 errno 。當沒有錯誤發生時, -1 也是一個合法的返回值。因此,程式要檢查錯誤,應該在呼叫 sysconf() 之前將 errno 設定為 0 ,然後,如果返回 -1,則檢驗到錯誤。
引數 name 指定我們感興趣的執行時限制的名字,它必須是以值中之一(除非另有說明,否則返回值都是整數):
引用_SC_2_C_BIND : 一個布林值,指出是否支援 POSIX C 語言繫結。返回值是 _POSIX2_C_BIND 。
_SC_2_C_DEV : 一個布林值,指出是否支援 POSIX C 語言開發使用工具選項。返回值是 _POSIX2_C_DEV 。
_SC_2_C_VERSION : 它指出支援哪一個 ISO POSIX.2 標準 (命令) 的版本。返回值是 _POSIX2_C_VERSION 。
_SC_2_CHAR_TERM : 一個布林值,指出是否至少支援一個終端。返回值是 _POSIX2_CHAR_TERM 。
_SC_2_FORT_DEV : 一個布林值,指出是否支援 FORTRAN 開發使用工具選項。返回值是 POSIX2_FORT_DEV 。
... .... 待補充 ... ...
使用 sysconf() 函式時,必須注意:
1、CLK_TCK 的值是可變的,因此,不應該假設它是一個編譯時間常量。
2、呼叫 setrlimit 會使 OPEN_MAX 的值發生改變。
3、 通過將 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,來確定實體記憶體的總量 (以位元組為單位) 可以返回一個值,該值超出 32 位程式中 long 或 unsigned long 可表示的最大值。同樣適用於通過將 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,來確定未使用的實體記憶體的總量 (以位元組為單位)。這個問題有兩個工作區。第 1 個工作區將程式作為 64 位的程式進行編譯 (從而使 long 足夠大到可以容納乘法運算的結果) ,但是,這樣做的缺點是得到的程式只能在 64 位的核心中執行。第 2 個工作區是用來將得到的乘法運算結果儲存在一個 64 位的量中,如 longlong_t (Solaris OS 型別) 或 long long (linux)。它的有點是可以在 32 位和 64 位的核心中正確工作。
相關文章
- 正規表示式理解及簡單應用舉例
- Python偏函式應用舉例-路燈指示牌Python函式
- 檢視PHP-FPM的記憶體佔用、程序個數等資訊PHP記憶體
- 【MEMORY】Oracle記憶體結構資源常用檢視及sqlOracle記憶體SQL
- Linux(CentOS) 檢視當前佔用CPU或記憶體最多的K個程式LinuxCentOS記憶體
- 如何檢視MySQL資料庫佔多大記憶體,佔用太多記憶體怎麼辦?MySql資料庫記憶體
- win10如何查詢哪些應用記憶體佔用大 win10如何檢視軟體記憶體佔用Win10記憶體
- Django - 檢視層 - 檢視函式及快捷方式Django函式
- Java應用程式中的記憶體洩漏及記憶體管理Java記憶體
- 常用記憶體操作函式記憶體函式
- Linux下檢視CPU型號,記憶體大小,硬碟空間的命令Linux記憶體硬碟
- 檢視伺服器型號、記憶體槽位、磁碟等資訊伺服器記憶體
- GDB檢視記憶體(x 命令)記憶體
- 如何檢視 Linux 下 CPU、記憶體和交換分割槽的佔用率?Linux記憶體
- 手撕記憶體操作函式記憶體函式
- YOLO例項分割預測後刪除視訊記憶體YOLO記憶體
- ICML 2024 | 梯度檢查點太慢?不降速、省視訊記憶體,LowMemoryBP大幅提升反向傳播視訊記憶體效率梯度記憶體反向傳播
- linux查詢作業系統資訊(CPU、記憶體、硬碟)Linux作業系統記憶體硬碟
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- Python記憶體檢視是什麼Python記憶體
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- 記憶體CPU監控記憶體
- CPU快取記憶體快取記憶體
- php實現共享記憶體程式通訊函式之_shmPHP記憶體函式
- golang Context應用舉例GolangContext
- UIBarButtonSystemItem 列舉樣式檢視UIMIT
- docker的資源控制(CPU、記憶體、IO)Docker記憶體
- R語言中管道符號 %>% 的應用 及 舉例R語言符號
- 優化.NET 應用程式 CPU 和記憶體的11 個實踐優化記憶體
- win10系統檢視電腦CPU處理器和記憶體的方法Win10記憶體
- 記憶體清理、動畫製作、CPU檢測等五款實用軟體推薦記憶體動畫
- 程序間通訊函式介面及應用模板小結函式
- 檢視LINUX程式記憶體佔用情況Linux記憶體
- [20190104]ipcs檢視共享記憶體段.txt記憶體
- java中如何檢視記憶體洩露Java記憶體洩露
- ubuntu解決GPU視訊記憶體佔用問題UbuntuGPU記憶體
- Hive 分析函式lead、lag例項應用Hive函式
- 17 種檢視 Linux 實體記憶體的方法Linux記憶體
- 設計模式應用舉例設計模式