查看剩余内存size
来源:互联网 发布:大文件传输软件 编辑:程序博客网 时间:2024/05/17 08:54
linux版
从/proc/meminfo中读取内存信息
linux版实验
实验环境 : debian7.5
// @file business_server.cpp#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/types.h> #include <sys/sysctl.h>#include "business_server.h"// linux版 : 查看剩余内存的测试代码unsigned long long getTotalSystemMemory();void server_proc(){ do { getTotalSystemMemory(); sleep(1); } while (1);}unsigned long long getTotalSystemMemory(){ // http://man.openbsd.org/sysctl.3 // https://www.unix.com/man-page/debian/3/sysctl/ // CTL_HW 在debian下没CTL_HW这个MIB的索引, 在unix下才有 // 看了procps的实现,是从/proc/meminfo文件中读的内存总量和内存余量 char sz_buf[1024] = {'\0'}; char* p_sub_str = NULL; FILE* p_file = NULL; bool b_mem_total_kb = false; long l_mem_total_kb = 0; bool b_mem_free_kb = false; long l_mem_free_kb = 0; p_file = fopen("/proc/meminfo", "rb"); if (NULL != p_file) { do { if (b_mem_total_kb && b_mem_free_kb) { break; // all find :) } if (NULL == fgets(sz_buf, sizeof(sz_buf), p_file)) { break; // file read over } // MemTotal: 494592 kB if (!b_mem_total_kb) { p_sub_str = strstr(sz_buf, "MemTotal:"); if (NULL != p_sub_str) { b_mem_total_kb = true; p_sub_str += strlen("MemTotal:"); l_mem_total_kb = strtoul(p_sub_str, NULL, 10); } } // MemFree: 23756 kB if (!b_mem_free_kb) { p_sub_str = strstr(sz_buf, "MemFree:"); if (NULL != p_sub_str) { b_mem_free_kb = true; p_sub_str += strlen("MemFree:"); l_mem_free_kb = strtoul(p_sub_str, NULL, 10); } } } while (1); fclose(p_file); p_file = NULL; } if (b_mem_total_kb && b_mem_free_kb) { printf("%ldKB/%ldKB\n", l_mem_free_kb, l_mem_total_kb); } else { printf("can't get memory info :("); } return 0;}
win版
GlobalMemoryStatusEx
win版实验
// 查看剩余内存的测试代码unsigned long long getTotalSystemMemory();int main(int argc, char** argv){ NS_SOCKET_EASY::thread_env_socket_init(); do { getTotalSystemMemory(); Sleep(1000); } while (1); printf("%s\n", LINE80); printf("THE END\n"); printf("%s\n", LINE80); NS_SOCKET_EASY::thread_env_socket_uninit(); return 0;}unsigned long long getTotalSystemMemory(){ MEMORYSTATUSEX status; status.dwLength = sizeof(status); LONGLONG llMemAll = 0; LONGLONG llMemFree = 0; LONGLONG llMemMbAll = 0; LONGLONG llMemMbFree = 0; GlobalMemoryStatusEx(&status); llMemAll = (LONGLONG)status.ullTotalPhys; llMemMbAll = (LONGLONG)(llMemAll * 1.0f / 1024 / 1024); llMemFree = (LONGLONG)status.ullAvailPhys; llMemMbFree = (LONGLONG)(llMemFree * 1.0f / 1024 / 1024); // 可用物理内存/物理内存总size printf("%lldMB/%lldMB\r", llMemMbFree, llMemMbAll); return status.ullTotalPhys;}
// test_request_memory.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <list>// 测试代码 : 分配小内存,统一释放int _tmain(int argc, _TCHAR* argv[]){ LONGLONG llsize_request = 0; size_t st_memory = (size_t)1024 * 1024; // 1MB std::list<char*> my_mem_list; std::list<char*>::iterator it; char* p_tmp = NULL; // 分配比较大的内存要用malloc, 如果用new, 分配不出来时, 会报错. // 不能一次分配超过2gb的内存,即使有12gb空闲内存 // 由于内存碎片的原因,申请1GB, 也只能成功一次 // 如果一次申请512MB, 也只能申请成功2次, 难道没有那么大块的内存了么? // 如果一次申请256MB, 可以申请成功5次 // 如果一次申请16MB, 可以申请成功1800MB // 如果一次申请4MB, 可以申请成功1900MB // 如果一次申请1MB, 可以申请成功1944MB // 如果一次申请32KB, 可以申请成功1988MB, 但是也不会超过2GB // 是不是winx86程序最多可以申请的总内存size,就是以2GB为边界呢? // 实验过了,如果是winx64程序,申请的总内存可以超过2GB, 但是很奇怪,居然申请的总内存大小超过了物理内存大小... // 是不是内存交换到硬盘上了? 每当内存快没有时,可用物理内存就跳到几百MB :) // 实验结论 : 一次最好只申请适当的内存, 每次申请不要太多. // 这样可以在系统中挤出最大可能的可用内存块(e.g. 统一申请小内存,压入队列,程序退出时,统一释放list) do { p_tmp = (char*)malloc(st_memory); if (NULL == p_tmp) { break; } my_mem_list.push_back(p_tmp); llsize_request += (LONGLONG)st_memory; printf("was requested %lldMB\r", (LONGLONG)(llsize_request * 1.0f / 1024 / 1024)); Sleep(1); } while (1); printf("\n"); printf("free memory\r\n"); for (it = my_mem_list.begin(); it != my_mem_list.end(); it++) { p_tmp = *it; if (NULL != p_tmp) { free(p_tmp); p_tmp = NULL; } } my_mem_list.clear(); system("pause"); return 0;}
阅读全文
0 0
- 查看剩余内存size
- linux查看剩余内存
- size 查看程序内存映像大小
- 查询linux系统中空闲内存/内存使用状态查看/剩余内存查看
- 查询linux系统中空闲内存/内存使用状态查看/剩余内存查看
- linux系统中空闲内存/物理内存使用状态/剩余内存查看
- 如何查看linux系统中空闲内存/物理内存使用/剩余内存
- 查看表空间剩余
- android查看剩余电量
- df命令查看磁盘剩余空间和free命令-内存管理
- 内存剩余空间
- Android:计算剩余内存
- 获取到剩余内存
- 查看session的size
- 代码查看screen size
- Linux查看磁盘剩余空间
- 查看tomcat剩余空间大小;
- Linux查看磁盘剩余空间
- BZOJ1507 [NOI2003]Editor 【splay】
- 【Scikit-Learn 中文文档】模型选择:选择估计量及其参数
- oracle 使表主键失效,外键失效
- Ceph 学习——OSD读写流程与源码分析(一)
- 关于ajax请求后台接口无法进行页面跳转的问题
- 查看剩余内存size
- ResultMap与ResultSet
- js常用对象
- Oracle 中delete truncate 及drop的区别
- teetcode Remove Linked List Elements我的笨方法
- 【Scikit-Learn 中文文档】无监督学习: 寻求数据表示
- Revit API之在墙或者屋顶上开洞口【比目鱼原创】
- Play2 for Java(七:global object)
- 计算机网络基本概述及简单介绍