日韩性视频-久久久蜜桃-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对空闲内存进行占用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品久久久一区二区三区 | 国产成人无码专区 | 黄色资源在线播放 | 久久久久久欧美 | 91精品网 | 7788色淫网站小说 | 日本色网址 | 国产一区二区激情 | 少妇福利视频 | 自拍视频在线播放 | 国产网站免费观看 | 中文字幕一区二区三区av | 欧美在线观看免费高清 | 国产99久久九九精品无码 | 超碰丝袜 | 亚洲国产一区二区在线观看 | 国产精品中文 | 免费成人在线播放 | 小少妇哺乳喂奶播放 | 在线播放一区二区三区 | 国产欧美精品一区二区三区 | 亚洲一区二区三区免费观看 | 伊人久久精品一区二区三区 | 久久666| 成人av影视在线观看 | 美女脱了裤子让男人捅 | 色图综合网 | 中文字幕国产日韩 | 蜜桃精品久久久久久久免费影院 | 精品少妇一区二区三区免费观看 | 久久91亚洲人成电影网站 | 日本成人一区二区 | 国产麻豆一区二区 | 国产三级精品三级在线 | 波多野结衣在线观看一区二区 | 国产福利一区二区视频 | 青青草原一区二区 | 玖玖视频网 | 在线中文字幕亚洲 | 国产精品国产三级国产播12软件 | 欧美激情黑白配 | 亚洲精品系列 | 亚洲美女www午夜 | 少妇精品久久久久久久久久 | 国产素人av | 久久精品一日日躁夜夜躁 | 日本黄色一级视频 | 香蕉人人精品 | 麻豆高清 | 在线观看国产视频 | 91蝌蚪91密月 | 性色av浪潮 | 日本一二三区在线视频 | 深爱五月激情五月 | 日日爽天天 | 91视频影院 | 久热精品在线观看视频 | 色老二导航 | 在线观看你懂得 | 性色av一区二区三区红粉影视 | 国产一区二区在线免费 | 精品成人免费视频 | 国产伦一区二区 | 国产精品视频全国免费观看 | 欧美在线精品一区 | 亚洲春色在线观看 | 国产一精品一aⅴ一免费 | 香蕉大人久久国产成人av | 精品人人妻人人澡人人爽牛牛 | 天天插天天射天天干 | 奇米网888 | 亚洲黄色片在线观看 | 在线看你懂得 | 高潮毛片又色又爽免费 | 91久久久久久久久久久 | 亚洲九九精品 | av黄色天堂| 国产精品日日做人人爱 | 在线免费观看污片 | 可以在线看黄的网站 | 日韩色图在线观看 | 精品无码久久久久国产 | 欧美三级一区二区三区 | 一级免费观看 | 男人操女人动态图 | 久久久资源网 | 都市激情亚洲一区 | 国产午夜不卡 | 亚洲人成电影在线 | 翔田千里一区二区三区av | 欧美黄网站在线观看 | 日本涩涩网站 | 特级西西444www高清大胆 | 亚洲hhh| 天天搞夜夜| 日韩中文字幕综合 | 手机免费av | 好吊妞这里只有精品 | 亚洲jlzzjizz少妇 |