hooks.cpp

来自「内存受限系统软件开发一书的代码。(虽不及Gang of Four的模式掷地有声」· C++ 代码 · 共 52 行

CPP
52
字号
// **************************************************************************
// Hooks.cpp
//
// C code to implement hooks.
// **************************************************************************

#include <iostream.h>
#include <assert.h>

typedef void* sysobj;

const int SIO_HOOK_TABLE_SIZE = 100;
const int SIO_MEMALLOC = 0;

typedef sysobj (*sio_hook_function) (sysobj) ;

extern sysobj sio_memalloc( sysobj );

sio_hook_function sio_hook_table[SIO_HOOK_TABLE_SIZE];

sysobj sio_memalloc( sysobj ) {
    return (sysobj)0;
}
void *memalloc(size_t bytesToAllocate) {
    return (void*)sio_hook_table[SIO_MEMALLOC]((sysobj)bytesToAllocate);
}

static sio_hook_function original_memalloc  = 0;
static size_t mem_counter = 0;


sysobj mem_counter_memalloc(sysobj size) {
    mem_counter += (size_t)size;
    return original_memalloc( size );
}

int main() {
    sio_hook_table[SIO_MEMALLOC] = sio_memalloc;

    (void)memalloc( 10 );
    assert( mem_counter == 0 );

    original_memalloc = sio_hook_table[SIO_MEMALLOC];
    sio_hook_table[SIO_MEMALLOC] = mem_counter_memalloc;

    (void)memalloc( 10 );
    assert( mem_counter == 10 );
    cout << "Completed\n";
    cin.get();
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?