我有一个游戏引擎,我想快速查看它使用了多少堆,所以我实现了这两个小例程
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/