Разное время работы вектора в Борланд и ВС

Тема в разделе "LANGS.C", создана пользователем systemio, 23 сен 2008.

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    SPA
    Не. Не dll. Принцип. Я уже знаю один ускоряющий местами на порядок, но у него есть ограничения и слабые места. Про Б говорят, что у них хуже код и только ММ все вытягивает. Поэтому и интересен принцип.
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Я думаю, что здесь оптимизация принципиальна при работе с маленькими объектами, а куча в этом смысле штука не очень подходящая. Поэтому можно реализовать свою стратегию и обернуть её в свой аллокатор. Пример хорошей реализации есть вбиблиотеке Loki от Александреску.
     
  3. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    Кстати да. В средней программе немалый процент вызовов operator new составляет выделение блоков памяти размером до 64 байт, неверующие могут взять свою программу, перегрузить обе версии глобального operator new и убедиться.
    Использование самодельного аллокатора вроде описанного Александреску для выделения маленьких блоков может сильно поднять производительность для многих проектов... Подробнее в его книге "Современное проектрование на С++"
    ЗЫ: если совместить эту технику с VirtualAlloc+MEM_RESERVE, то можно даже избежать излишних затрат памяти
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    scf
    Hoard (http://www.hoard.org/) доставляет. Код смотрел давно, но не удивлюсь, если там используется именна эта техника.
     
  5. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    Народ подскажите как это сделать
    To use the Winhoard version, link your executable with usewinhoard.obj and winhoard.lib, and then use winhoard.dll:
    cl /Ox /MD myprogram.cpp usewinhoard.obj winhoard.lib

    Я попытался в ВС2003 ПроджектОпшн во вкладке Линкер-КомандЛайн в дополнительных опциях указать usewinhoard.obj winhoard.lib но вылезло куча линкерор:
    LIBC.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR71.dll)
    LIBC.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRT.lib(MSVCR71.dll)
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    systemio
    Сменить /MT на /MD не пробовали?
     
  7. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    так здесь и так /MD!
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    как вы наверное понимаете, что-то из у вас собрано с /MT, а что-то с /MD -- отсюда и конфликт.