gpt4 book ai didi

c - 为什么 sbrk() 不告诉我正在使用多少堆?

转载 作者:行者123 更新时间:2023-11-30 14:27:30 26 4
gpt4 key购买 nike

我有一个游戏引擎,我想快速查看它使用了多少堆,所以我实现了这两个小例程

static void * start_memory = 0;
unsigned long System::memoryUsage(){
void * here = sbrk(0);
return (char*) here - (char*) start_memory;
}

void System::startMemoryUsage(){
start_memory = sbrk(0);
}

我很早就在 main() 中调用了 startMemoryUsage()。当我在运行时使用它时,我通常会看到相对较低的值,例如 300kb,但顶部显示 RSS 大约为 30mb。为什么我没有从 sbrk() 获得准确的测量结果?

我猜这与线程有关。游戏引擎生成 5 个线程(+ 主线程总共 6 个),用于处理输入和音乐等事务。难道主线程确实使用了 300kb,但其他线程总共使用了 30mb?

最佳答案

sbrk(0) 仅告诉您数据段的末尾在哪里。 malloc() 不仅可以通过扩展数据段来获取内存,还可以通过调用 mmap() 进行更大的分配来获取内存。另外,由于您正在使用多个线程,因此其他线程的其他区域也可能被映射。

关于c - 为什么 sbrk() 不告诉我正在使用多少堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862884/

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