Перегрузка new

Тема в разделе "WASM.WIN32", создана пользователем Tiro, 1 сен 2006.

  1. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    может не совсем понимаю, но что мешает сделать так:
    Код (Text):
    1. class A {
    2. public:
    3.   void * __cdecl operator new (size_t size) {
    4.     //implementation here
    5.     return NULL;
    6.   }
    7.   void __cdecl operator delete (void * ptr) {
    8.   }  
    9. };
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    censored
    Дело в том, что так можно подцепить реализацию на каждый объект отдельно или на базовый. Трудность в том, что нужно править объекты, по отдельности, если их вообще можно править (напр., используется библиотека).
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Аллокация памяти может вызвать перебор уже выделенных блоков, а может и не вызвать - зависит от реаллокаций, освобождения блоков, фрагментации и многого другого. Если перебор происходит, то лучше чтобы он произошёл в меньшем количестве блоков. Поэтому, если каждый документ имеет собственный heap - это будет быстрее, по сравнению с одним heap-ом на все документы. Кроме того, чтобы закрыть документ надо вызвать один HeapDestroy(), вместо освобождения каждого элемента в документе.

    Насчёт STL - да, там не развернешься особо. Но я STL не использую - все векторы, листы, дервья и другие коллекции - всё сделано с нуля. Кстати, STL в дизассемблере: картина не очень впечатляет.