add memory info api

This commit is contained in:
blueloveTH 2024-03-22 11:45:43 +08:00
parent e11e888acd
commit fc98c526ea
2 changed files with 37 additions and 0 deletions

View File

@ -22,4 +22,7 @@ void* pool128_alloc() noexcept{
void pools_shrink_to_fit() noexcept;
std::string pool64_info() noexcept;
std::string pool128_info() noexcept;
}; // namespace pkpy

View File

@ -235,6 +235,37 @@ struct MemoryPool{
});
}
std::string info(){
int n_used_arenas = _arenas.size();
int n_total_arenas = n_used_arenas + _empty_arenas.size();
int n_used_blocks = 0;
int n_total_blocks = n_total_arenas * __MaxBlocks;
size_t allocated_size = 0;
size_t total_size = 0;
_arenas.apply([&](Arena* arena){
allocated_size += arena->allocated_size();
total_size += __BlockSize * __MaxBlocks;
n_used_blocks += __MaxBlocks - arena->_free_list_size;
});
_empty_arenas.apply([&](Arena* arena){
total_size += __BlockSize * __MaxBlocks;
});
char buffer[512];
snprintf(
buffer,
sizeof(buffer),
"MemoryPool<%d>: %.2f/%.2f MB - %d/%d arenas - %d/%d blocks",
__BlockSize,
(float)allocated_size / (1024*1024),
(float)total_size / (1024*1024),
n_used_arenas,
n_total_arenas,
n_used_blocks,
n_total_blocks
);
return buffer;
}
~MemoryPool(){
_arenas.apply([](Arena* arena){ delete arena; });
_empty_arenas.apply([](Arena* arena){ delete arena; });
@ -255,4 +286,7 @@ void pools_shrink_to_fit() noexcept {
pool128.shrink_to_fit();
}
std::string pool64_info() noexcept { return pool64.info(); }
std::string pool128_info() noexcept { return pool128.info(); }
}