gpt4 book ai didi

c++ - 分配内存时内存使用量不会增加

转载 作者:行者123 更新时间:2023-11-28 04:46:07 24 4
gpt4 key购买 nike

我想通过检查操作系统的内存信息,从 C++ 程序中找出进程使用的字节数。我想这样做的原因是在分配内存时找到内存分配中可能的开销(由于空闲列表中的内存控制 block /节点等)。目前我在 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;
}

运行这段代码时,我本以为会看到在分配一个 int 后内存使用量增加了。但是,当我运行上面的代码时,我得到以下输出:

75190272 75190272
819200 819200

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

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

  2. 操作系统为何要为正在运行的进程分配如此大量的内存。

当我运行代码并检查事件监视器时,我发现使用了 304 kb 的内存,但该数字与以编程方式获得的虚拟/驻留内存使用量不同。

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

感谢阅读

最佳答案

C++ 运行时通常会在程序启动时分配一 block 内存,然后在您使用 new 之类的东西时将其打包到您的代码中,并在您调用时将其添加回内存块删除。因此,操作系统对单个 newdelete 调用一无所知。对于 C(或 C++)中的 mallocfree 也是如此

关于c++ - 分配内存时内存使用量不会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49241713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com