日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

根据/proc/meminfo对空闲内存进行占用

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据/proc/meminfo对空闲内存进行占用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include <stdio.h>#include <sys/sysinfo.h> #include <linux/kernel.h> /* 包含sysinfo結構體信息*/ #include <unistd.h>#include <string> #include <iostream> #include <fstream> #include <map> #include <vector> #include <assert.h> #include <stdlib.h> using namespace std;/// // Item Names which should be corresponded to the enum below restrictly const char * ItemCheckName[] = {"MemTotal","MemFree","Buffers","Cached" };enum ITEMCHECKNAME {MEMTOTAL = 0,MEMFREE,BUFFERS,CACHED };const int INVALID_VALUE = -1; const char* MEM_INFO_FILE_NAME = "/proc/meminfo"; bool isDebugging = false; // string trim(const string& str) {string::size_type pos = str.find_first_not_of(' ');if (pos == string::npos){return str;}string::size_type pos2 = str.find_last_not_of(' ');if (pos2 != string::npos){return str.substr(pos, pos2 - pos + 1);}return str.substr(pos); }int split(const string& str, vector<string>& ret_, string sep = ",") {if (str.empty()){return 0;}string tmp;string::size_type pos_begin = str.find_first_not_of(sep);string::size_type comma_pos = 0;while (pos_begin != string::npos){comma_pos = str.find(sep, pos_begin);if (comma_pos != string::npos){tmp = str.substr(pos_begin, comma_pos - pos_begin);pos_begin = comma_pos + sep.length();}else{tmp = str.substr(pos_begin);pos_begin = comma_pos;}if (!tmp.empty()){ret_.push_back(tmp);tmp.clear();}}return 0; }bool CheckAllBeenSet(vector<pair<string, int> > itemsToCheck) {vector<pair<string, int> >::iterator it = itemsToCheck.begin();while (it != itemsToCheck.end()){if (it->second == INVALID_VALUE){return false;}it++;}return true; }void PrintItems(vector<pair<string, int> > itemsToCheck) {vector<pair<string, int> >::iterator it = itemsToCheck.begin();while (it != itemsToCheck.end()){cout << "KEY = " << it->first << " , VALUE = " << it->second << " KB "<< endl;it++;} }unsigned int CheckFreeMemInKByte(vector<pair<string, int> > itemsToCheck) {// 空閑內存計算方式:如果Cached值大于MemTotal值則空閑內存為MemFree值,否則空閑內存為MemFree值+Buffers值+Cached值int rlt;if (itemsToCheck[CACHED].second > itemsToCheck[MEMTOTAL].second){ rlt = itemsToCheck[MEMFREE].second;if (isDebugging){cout << "CACHED(" << itemsToCheck[CACHED].second << "KB) > MEMTOTAL(" << itemsToCheck[MEMTOTAL].second << "KB)\n";cout << "FreeMemInKb is " << rlt << "KB\n";}}else{rlt = itemsToCheck[CACHED].second + itemsToCheck[MEMFREE].second + itemsToCheck[BUFFERS].second;if (isDebugging){cout << "CACHED(" << itemsToCheck[CACHED].second << "KB) <= MEMTOTAL(" << itemsToCheck[MEMTOTAL].second << "KB)\n";cout << "FreeMemInKb is " << rlt << "KB\n";}}return rlt; }// usage int main(int argc, char *agrv[]) {if (argc < 3 || argc > 4){cout << "Usage :\n memCons fromTotalMem freePercentage [isDebugging]\n";cout << "For example : \'memCons 0 1\'\n means to take 99% of freeMem, that is to leave only 1% out of free memory\n";cout << "For example : \'memCons 1 1\'\n means to take 99% of totalMem, that is to leave only 1% out of all the memory\n";cout << "For example : \'memCons 1 1 1\'\n means in the debugging mode\n";return -1;}bool fromTotalMem = atoi(agrv[1]) == 1 ? true : false;int freePercentage = atoi(agrv[2]);isDebugging = (argc == 4 && atoi(agrv[3]) == 1) ? true : false;if (!(freePercentage > 0 && freePercentage < 100)){cout << "the second argument of memCons must between 0 and 100";return -1;}struct sysinfo s_info;int error;error = sysinfo(&s_info);printf("the followings are output from \'sysinfo\' call \n\ncode error=%d\n",error);printf("Uptime = %ds\nLoad: 1 min%d / 5 min %d / 15 min %d\n""RAM: total %d / free %d /shared%d\n""Memory in buffers = %d\nSwap:total%d/free%d\n""Number of processes = %d\n\n\n",s_info.uptime, s_info.loads[0],s_info.loads[1], s_info.loads[2],s_info.totalram, s_info.freeram,s_info.totalswap, s_info.freeswap,s_info.procs );vector< pair<string, int> > itemsToCheck;std::pair <std::string, int> memTotal(ItemCheckName[MEMTOTAL], INVALID_VALUE);itemsToCheck.push_back(memTotal);std::pair <std::string, int> memfreePair(ItemCheckName[MEMFREE], INVALID_VALUE);itemsToCheck.push_back(memfreePair);std::pair <std::string, int> buffers(ItemCheckName[BUFFERS], INVALID_VALUE);itemsToCheck.push_back(buffers);std::pair <std::string, int> cached(ItemCheckName[CACHED], INVALID_VALUE);itemsToCheck.push_back(cached);vector<string> splitedWords;ifstream infile(MEM_INFO_FILE_NAME); if (infile.fail()){cerr << "error in open the file";return false;}int hitCnt = itemsToCheck.size(); while(hitCnt != 0){splitedWords.clear();char temp[100];infile.getline(temp, 100); const string tmpString = temp;split(tmpString, splitedWords, ":"); // use the first part to check whether to continuesplitedWords[0] = trim(splitedWords[0]);int foundIndex = -1;for (int i = 0; i < itemsToCheck.size(); i++){if (itemsToCheck[i].first == splitedWords[0]){foundIndex = i;hitCnt--;break;}}if (foundIndex == -1){continue;}// check the numberstring numberInString = trim(splitedWords[1]);int firstNotNumberPos = numberInString.find_first_not_of("123456789");numberInString.substr(0, firstNotNumberPos);int num = atoi(numberInString.c_str());// insert into containeritemsToCheck[foundIndex].second = num;if (infile.eof()){break;}}infile.close();PrintItems(itemsToCheck);if (CheckAllBeenSet(itemsToCheck) == false){cout << "Error in checking " << MEM_INFO_FILE_NAME << endl;return -1;}// set used memory according to the requirementslong long memToUse = 0;long long freeMemCount = 0;if (isDebugging){cout << "Need memory use in total one ? " << fromTotalMem << endl;}if (!fromTotalMem){if (isDebugging){cout << "Need memory use in free one\n";}freeMemCount = CheckFreeMemInKByte(itemsToCheck);}else{if (isDebugging){cout << "Need memory use in total one\n";cout << "total memory is " << itemsToCheck[MEMTOTAL].second << "KB, that " << itemsToCheck[MEMTOTAL].second * 1024 << "B" << endl;}freeMemCount = itemsToCheck[MEMTOTAL].second;}cout << "Free Mem Count is " << freeMemCount << "KB" << endl;memToUse = freeMemCount * ((double)1 - (double)((double)freePercentage / (double)100) );cout << "MemToUse is " << memToUse << "KB" << endl;char* memConsumer[1024];int j = 0;for (; j < 1024; j++){memConsumer[j] = NULL;}try{for (j = 0; j < 1024; j++){if (memConsumer[j] == NULL){memConsumer[j] = new char[memToUse];}for (int i = 0; i < memToUse; i++){memConsumer[j][i] = '5';}}}catch(std::bad_alloc){// swallow the exception and continuecout << "no more memory can be allocated, already alloced " << j * memToUse << "B";}while (1){ sleep(2);}return 0; }

?

轉載于:https://www.cnblogs.com/aicro/p/3205540.html

總結

以上是生活随笔為你收集整理的根据/proc/meminfo对空闲内存进行占用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97久久人人超碰caoprom欧美 | 精品一区在线观看视频 | 黑人三级视频 | 一级黄色性视频 | 欧美日韩久 | 亚洲天堂aaa | 玖玖视频国产 | 女人脱了内裤趴开腿让男躁 | 成人在线观看黄色 | 精品国产第一页 | 日韩在线导航 | 最新的av网站| 男女涩涩 | 亚洲精品日韩欧美 | 亚洲伊人影院 | 五月天开心网 | 精品乱码久久久久久中文字幕 | 在线观看涩涩 | 草草影院最新地址 | 久久无码人妻一区二区三区 | 在线91视频 | 精品人妻一区二区三区日产乱码 | 欧美在线一区二区视频 | 天天撸夜夜操 | 亚洲精品久久久久久久久 | 中文字幕一区二区人妻痴汉电车 | a级片在线 | 欧美怡红院一区二区三区 | 天天干天天操天天操 | 成人午夜视频一区二区播放 | 高清免费视频日本 | 高清不卡一区二区三区 | 伊人草草| 在线免费观看污片 | 青青草免费看 | 综合激情视频 | 午夜影院 | 欧美色精品 | 日本做爰高潮又黄又爽 | 性爱免费在线视频 | 亚洲精品电影院 | 国产激情av一区二区三区 | 99草| 99草视频 | 无码国产精品一区二区免费16 | 国内精品久久久 | 就是喜欢被他干 | 黄色在线视频网址 | 美女激情网 | 精品无人国产偷自产在线 | 欧产日产国产69 | 制服av在线| 精品www久久久久久奶水 | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 加勒比在线免费视频 | 一区二区国产电影 | 日韩精品在线视频免费观看 | 日韩制服在线 | 亚洲做受高潮 | 成人免费视频国产在线观看 | 国产欧美网站 | 一本到在线 | av手机在线播放 | 亚洲av无码一区二区三区在线播放 | 国产一级片免费在线观看 | www啪啪 | 69人妻一区二区三区 | 乱视频在线观看 | 97成人在线观看 | 亚洲爽爆 | 美女隐私直播 | 色猫咪av在线 | 中文字幕一区二区久久人妻 | 级毛片内射视频 | 亚洲成人自拍视频 | 超爽视频 | 亚洲 另类 春色 国产 | 91大神小宝寻花在线观看 | 男同av在线观看一区二区三区 | 日韩区在线 | 99青草| 五月婷婷丁香激情 | 久艹在线观看视频 | 黄页嫩草 | 欧美中文字幕一区二区三区 | 桃谷绘里香在线播放 | 日韩二级| 黑人糟蹋人妻hd中文字幕 | 免费在线成人网 | 成全世界免费高清观看 | 亚洲精品乱码久久久久久国产主播 | 欧美一区二区三区久久妖精 | 91精品推荐| 香蕉成人在线视频 | 九草视频在线观看 | 一级黄色大片免费看 | 中文字幕高清一区 | a视频网站| 欧美日b片 |