第 6 页 分配空间函数 gcov_allocate 2.5 分配空间函数 gcov_allocate
代码如下。其中的注释为笔者加入。
#if ! IN_LIBGCOV
static void
gcov_allocate ( unsigned length )
{
size_t new_size = gcov_var .alloc ;
if ( ! new_size )
new_size = GCOV_BLOCK_SIZE ; /***** if new_size==0, then, new_size=1024( GCOV_BLOCK_SIZE=1024 ) */
new_size += length ; /***** if length==1, then, new_size=1025 */
new_size *= 2 ; /***** then, new_size=1025*2=2050 */
gcov_var .alloc = new_size;
gcov_var .buffer = xrealloc ( gcov_var .buffer , new_size << 2="" size="1025*4=8200">
}
#endif
实际上 gcov_var.alloc 是一个内存 block ,以 4 字节为一个单位。由代码及其注释可以看出,当 length=1 时, gcov_var.alloc=2050 ,调用 gcov_allocate 后,实际上分配了 2050*4=8200 个字节的空间给 gcov_var.buffer 。
此处,不得不介绍一下 gcov_var 。