staticvoiddisplay_mallinfo(int seq){ structmallinfomi; mi = mallinfo(); std::stringstream ss;
ss << "*************************** " << seq; ss << "\nTotal non-mmapped bytes (arena): " << mi.arena; ss << "\n# of free chunks (ordblks): " << mi.ordblks; ss << "\n# of free fastbin blocks (smblks): " << mi.smblks; ss << "\n# of mapped regions (hblks): " << mi.hblks; ss << "\nBytes in mapped regions (hblkhd): " << mi.hblkhd; ss << "\nMax. total allocated space (usmblks): " << mi.usmblks; ss << "\nFree bytes held in fastbins (fsmblks): " << mi.fsmblks; ss << "\nTotal allocated space (uordblks): " << mi.uordblks; ss << "\nTotal free space (fordblks): " << mi.fordblks; ss << "\nTopmost releasable block (keepcost): " << mi.keepcost;
--------------------stats info(0)--------- Arena 0: # 非mmap申请的内存区域 0 systembytes = 59752448# glibc 向系统申请的内存大小, 单位字节 in use bytes = 27787856# 用户进程通过 malloc 向 glibc 申请分配的内存大小 Arena 1: # 非mmap申请的内存区域 1 systembytes = 135168 in use bytes = 7504 Total (incl. mmap): # 所有内存信息(包含mmap),各个arena数值加上mmap信息 systembytes = 63369216# 包含mmap的所有内存大小, 由mmap+各个Arena累计获取 in use bytes = 31276960# 用户进程通过 malloc 向 glibc 申请分配的内存大小,由各个Arena累加获得 max mmap regions = 6# mmap 区域个数 max mmap bytes = 3481600# mmap 申请的内存字节数
*************************** 0 Total non-mmapped bytes (arena): 59887616# 非mmap申请的内存字节数,等于stats info中所有的Arean的system bytes计数和(内存分配区域),包含正在使用的和空闲的 # of free chunks (ordblks): 12549 # 普通(即非fastbin)空闲块的数量 # of free fastbin blocks (smblks): 6 # fastbin空闲块的数量 # of mapped regions (hblks): 6 # 当前使用mmap分配的块数 Bytes in mapped regions (hblkhd): 3481600# 当前使用mmap分配的块中的字节数 Max. total allocated space (usmblks): 0# 该字段未使用,始终为0。以前代表已分配最大空间(以字节为单位)。 Free bytes held in fastbins (fsmblks): 592# fastbin空闲块中的字节总数 Total allocated space (uordblks): 27794800# 使用中的分配所使用的字节总数 Total free space (fordblks): 32092816# 空闲块中的字节总数 Topmost releasable block (keepcost): 4016# 堆顶部的可释放可用空间总量。这是malloc_trim理想情况下可以释放的最大字节数(即:忽略页面对齐限制等)