我需要在我的程序运行时获取mem使用VIRT和RES并显示它们.
到目前为止我尝试了什么:
getrusage(http://linux.die.net/man/2/getrusage)
int who = RUSAGE_SELF;
struct rusage usage;
int ret;
ret=getrusage(who,&usage);
cout<<usage.ru_maxrss;
Run Code Online (Sandbox Code Playgroud)
但我总是0.
在Linux下的C/C++中,我需要分配一个大的(几千兆字节)内存块,以便存储连接到以太网端口的传感器的实时数据和大约110MB/s的流数据.我想分配尽可能多的内存,以最大化我可以存储的数据序列的长度.但是,我还需要确保不会进行磁盘交换,因为产生的延迟和磁盘访问带宽有限会导致传感器(非常有限)的缓冲区溢出.
确定要分配多少内存的最佳方法是什么?我仅限于分配比报告的可用内存稍小的块,还是可以更直接地与linux虚拟内存管理器连接?
我知道如何使用malloc()和free()分配内存,但是还有一个标准的C函数来检查剩余多少内存,所以我可以定期调用它以确保我的代码没有内存泄漏?
我唯一能想到的是调用malloc(1)无限循环直到它返回错误,但是不应该有更有效的方法吗?
是否可以在标准 C++ 11中获得系统(x86,x64,PowerPC/Windows,Linux或MacOS)上的剩余可用内存而不会崩溃?
一种天真的方式是尝试从太大的大小开始分配非常大的数组,每次失败时捕获异常并减小大小直到没有抛出异常.但也许有一种更有效/更聪明的方法......
编辑1:事实上我不需要确切的内存量.我想知道大约(100MB的错误条)我的代码在启动时可以使用多少.
编辑2:您如何看待这段代码?在程序开始时运行它还是可以破坏内存是否安全?
#include <iostream>
#include <array>
#include <list>
#include <initializer_list>
#include <stdexcept>
int main(int argc, char* argv[])
{
static const long long int megabyte = 1024*1024;
std::array<char, megabyte> content({{'a'}});
std::list<decltype(content)> list1;
std::list<decltype(content)> list2;
const long long int n1 = list1.max_size();
const long long int n2 = list2.max_size();
long long int i1 = 0;
long long int i2 = 0;
long long int result = 0;
for (i1 = 0; i1 < n1; ++i1) {
try …Run Code Online (Sandbox Code Playgroud) 我想获得每个进程和系统范围的内存使用信息.在Windows中,它非常简单.GetProcessMemoryInfo和GlobalMemoryStatusEx可以非常轻松地完成这些工作.例如,GetProcessMemoryInfo给出给定进程的"PeakWorkingSetSize".GlobalMemoryStatusEx返回系统范围的可用内存.
但是,我需要在Linux上这样做.我正在尝试找到与GetProcessMemoryInfo和GlobalMemoryStatusEx等效的Linux系统API.
我发现'getrusage'.但是,struct rusage中的max'ru_maxrss'(驻留集大小)仅为零,未实现.此外,我不知道获得系统范围的可用内存.
目前的解决方法,我正在使用"system("ps -p%my_pid -o vsz,rsz");".手动登录到文件.但是,处理数据很脏并且不方便.
我想知道一些花哨的Linux API用于此目的.
我正在使用 VC++ 2012。我想知道当前线程中有多少堆栈内存可用。
快速搜索指向使用 malloc.h 和 stackavail() 函数,但它在 Visual C++ 2012 中不存在。我如何以另一种方式实现这一点?
有问题的例子是这样的:
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
using namespace std;
int _tmain()
{
cout << "Available stack: " << stackavail() << std::endl;
}
Run Code Online (Sandbox Code Playgroud) 我试图通过C获得全部和可能的系统空闲内存.它应该是系统无关的.
要启动讨论,我可以建议使用getpagesize()方法来获取页面大小.任何人都可以帮助关于内存页面的数量会很好.
可能重复:
malloc可以分配的最大内存!
我怎么知道我可以占用的堆的最大大小malloc().我使用的是MS Visual Studio 2010.