📄 hp.c
字号:
#include "hprof.h"static intreal_size(int alignment, int nbytes){ if ( alignment > 1 ) { int wasted; wasted = alignment - ( nbytes % alignment ); if ( wasted != alignment ) { nbytes += wasted; } } return nbytes;}static voidadd_block(Blocks *blocks, int nbytes){ int header_size; int block_size; BlockHeader *block_header; HPROF_ASSERT(blocks!=NULL); HPROF_ASSERT(nbytes>0); header_size= real_size(blocks->alignment, sizeof(BlockHeader)); block_size= blocks->elem_size*blocks->population; if ( nbytes > block_size ) { block_size = real_size(blocks->alignment, nbytes); } block_header = (BlockHeader*)HPROF_MALLOC(block_size+header_size); block_header->next = NULL; block_header->bytes_left = block_size; block_header->next_pos = header_size; /* Link in new block */ if ( blocks->current_block != NULL ) { blocks->current_block->next = block_header; } blocks->current_block = block_header; if ( blocks->first_block == NULL ) { blocks->first_block = block_header; }}Blocks *blocks_init(int alignment, int elem_size, int population){ Blocks *blocks; HPROF_ASSERT(alignment>0); HPROF_ASSERT(elem_size>0); HPROF_ASSERT(population>0); blocks = (Blocks*)HPROF_MALLOC(sizeof(Blocks)); blocks->alignment = alignment; blocks->elem_size = elem_size; blocks->population = population; blocks->first_block = NULL; blocks->current_block = NULL; return blocks;}void *blocks_alloc(Blocks *blocks, int nbytes){ BlockHeader *block; int pos; void *ptr; HPROF_ASSERT(blocks!=NULL); HPROF_ASSERT(nbytes>=0); if ( nbytes == 0 ) { return NULL; } block = blocks->current_block; if ( block == NULL || block->bytes_left < nbytes ) { add_block(blocks, nbytes); block = blocks->current_block; } pos = block->next_pos; nbytes = real_size(blocks->alignment, nbytes); ptr = (void*)(((char*)block)+pos); block->next_pos += nbytes; block->bytes_left -= nbytes; return ptr;}/* Terminate the Blocks */voidblocks_term(Blocks *blocks){ BlockHeader *block; HPROF_ASSERT(blocks!=NULL); block = blocks->first_block; while ( block != NULL ) { BlockHeader *next_block; next_block = block->next; HPROF_FREE(block); block = next_block; } HPROF_FREE(blocks);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -