内存使用率不低于';分配内存时不会增加 我想通过检查操作系统的内存信息,找出C++程序中进程所使用的字节量。我想这样做的原因是,在分配内存时(由于空闲列表中的内存控制块/节点等),查找内存分配中可能的开销。目前我在mac上,正在使用以下代码: #include <mach/mach.h> #include <iostream> int getResidentMemoryUsage() { task_basic_info t_info; mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; if (task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&t_info), &t_info_count) == KERN_SUCCESS) { return t_info.resident_size; } return -1; } int getVirtualMemoryUsage() { task_basic_info t_info; mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; if (task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&t_info), &t_info_count) == KERN_SUCCESS) { return t_info.virtual_size; } return -1; } int main(void) { int virtualMemoryBefore = getVirtualMemoryUsage(); int residentMemoryBefore = getResidentMemoryUsage(); int* a = new int(5); int virtualMemoryAfter = getVirtualMemoryUsage(); int residentMemoryAfter = getResidentMemoryUsage(); std::cout << virtualMemoryBefore << " " << virtualMemoryAfter << std::endl; std::cout << residentMemoryBefore << " " << residentMemoryAfter << std::endl; return 0; }

内存使用率不低于';分配内存时不会增加 我想通过检查操作系统的内存信息,找出C++程序中进程所使用的字节量。我想这样做的原因是,在分配内存时(由于空闲列表中的内存控制块/节点等),查找内存分配中可能的开销。目前我在mac上,正在使用以下代码: #include <mach/mach.h> #include <iostream> int getResidentMemoryUsage() { task_basic_info t_info; mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; if (task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&t_info), &t_info_count) == KERN_SUCCESS) { return t_info.resident_size; } return -1; } int getVirtualMemoryUsage() { task_basic_info t_info; mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; if (task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&t_info), &t_info_count) == KERN_SUCCESS) { return t_info.virtual_size; } return -1; } int main(void) { int virtualMemoryBefore = getVirtualMemoryUsage(); int residentMemoryBefore = getResidentMemoryUsage(); int* a = new int(5); int virtualMemoryAfter = getVirtualMemoryUsage(); int residentMemoryAfter = getResidentMemoryUsage(); std::cout << virtualMemoryBefore << " " << virtualMemoryAfter << std::endl; std::cout << residentMemoryBefore << " " << residentMemoryAfter << std::endl; return 0; },c++,macos,memory,ram,C++,Macos,Memory,Ram,我有几个问题,因为这个输出没有任何意义 为什么分配整数后虚拟/驻留内存都没有改变 为什么操作系统要为正在运行的进程分配如此大的内存 当我运行代码并检查活动监视器时,我发现使用了304 kb的内存,但这个数字与通过编程获得的虚拟/驻留内存使用量不同 我的最终目标是在分配数据时能够找到内存开销,那么有没有办法做到这一点(即,确定操作系统使用的字节数,并与分配的字节数进行比较,以找出我目前所想的差异) 阅读< p> C++运行时通常在程序启动时分配内存块,然后在使用“新< /Cord>”之类的东西时将

我有几个问题,因为这个输出没有任何意义

  • 为什么分配整数后虚拟/驻留内存都没有改变

  • 为什么操作系统要为正在运行的进程分配如此大的内存

  • 当我运行代码并检查活动监视器时,我发现使用了304 kb的内存,但这个数字与通过编程获得的虚拟/驻留内存使用量不同

  • 我的最终目标是在分配数据时能够找到内存开销,那么有没有办法做到这一点(即,确定操作系统使用的字节数,并与分配的字节数进行比较,以找出我目前所想的差异)

  • <谢谢>阅读

    < p> C++运行时通常在程序启动时分配内存块,然后在使用“<代码>新< /Cord>”之类的东西时将其打包到代码中,并在调用<代码>删除< /代码>时将其添加到块中。因此,操作系统对单个
    new
    delete
    调用一无所知。对于C(或C++)中的
    malloc
    free

    同样如此。首先,您测量的是页数,而不是实际分配的内存。其次,运行时在启动时预先分配几个页面。如果要观察某个进程,请分配多个int。尝试分配数千个int,您将观察到一些更改。

    操作系统分配给进程的内存不是测量程序请求的内存的好工具。
    int
    可能适合已分配的页面。请尝试更大的分配。请注意,这些数字都是1024的精确倍数。@FrançoisAndrieux如果int仅为4字节,而页面为4kb,是否有办法在单个页面中查询当前进程使用的数据量?如果从未写入分配的内存,很有可能,操作系统永远不会用物理页面来支持分配(因为它不需要写),如果C++运行时分配了一大块内存并将其打包成一个池分配器,有没有办法确定存储有关分配的元数据时丢失的字节数?@Raees只有在您的实现提供了这样的内容时,它几乎肯定不会这样做。或者如果您有分配器的源代码。
    75190272 75190272
    819200 819200