Показать сообщение отдельно

  #9  
Старый 09.04.2010, 23:21
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами: 9320830

Репутация: 86
По умолчанию

Цитата:
Сообщение от rudvil  
Код:
void operator delete (void* mem) {
    std::free(mem);
}
void operator delete[] (void* mem) {
    std::free(mem);
}
Как можно узнать сколько байт в памяти занимает "mem"?
если это вообще реально...

Поясню, при выделении памяти с помощью
Код:
void* operator new (std::size_t size) {
    usedMemory += size;
    void* mem = std::malloc(size);
    if (!mem)
        ail::fatal_error("\n[ALLOCATING FAILED]\n");
    return mem;
}
все просто - мы уже получаем размер выделяемой памяти, собственно хочется так же узнать сколько памяти удаляется при вызове delete или delete[], чтобы уменьшить счетчик используемой памяти...
Мб пригодится
Код:
void* operator new (std::size_t size) {
    if (currentMemory + size >= maxMemory)
        fatal_error("REACHED MEMORY LIMIT, EXITING..");
    currentMemory += size;
    void* ptr = std::malloc(size + sizeof(std::size_t));
    if (ptr == NULL)
        fatal_error("new - MALLOC FAIL\n");
    *(std::size_t*)ptr = size;
    return ((std::size_t*)ptr) + 1;
}

void operator delete (void* ptr) {
    std::size_t size = (*(((std::size_t*)ptr) - 1));
    currentMemory -= size;
    ptr = (void*)(((std::size_t*)ptr) - 1);
    std::free(ptr);
}

void* operator new[] (std::size_t size) {
    if (currentMemory + size >= maxMemory)
        fatal_error("REACHED MEMORY LIMIT, EXITING..");
    currentMemory += size;
    void* ptr = std::malloc(size + sizeof(std::size_t));
    if (ptr == NULL)
        fatal_error("new[] - MALLOC FAIL\n");
    *(std::size_t*)ptr = size;
    return ((std::size_t*)ptr) + 1;
}

void operator delete[] (void* ptr) {
    std::size_t size = (*(((std::size_t*)ptr) - 1));
    currentMemory -= size;
    ptr = (void*)(((std::size_t*)ptr) - 1);
    std::free(ptr);
}
т.б. в выделяемый блок памяти добавляем сигнатуру, в которой хранится размер выделенного блока.
 
Ответить с цитированием