Здравствуйте, Disappear, Вы писали:
D>Привел тесты. Покритикуйте плиз, если что не так. D>MSVC 8.1, Northwood P4 3.0Ghz
D>Невольно в голову лезет фраза — самые эффективные инструменты, это инструменты языка.
D>Стоит-ли использовать boost::variant? Для каких задач?
Комментарий №1 : Нельзя использовать имена начинающиеся с подчеркивания за которым следует заглавная буква.
Комментарий №2 : Этот цикл 100% будет выкинут оптимизатором ибо тут ничего не делается
D> for (int i = 0; i < nElems; ++i)
D> {
D> int a = pUn[i].a.a;
D> }
Это может произойти и с другими кусками кода. Для того, что бы оптимизатор их не выкидывал надо делать дополнительные действия.
К примеру
int a = 0;
for (int i = 0; i < nElems; ++i)
{
a += pUn[i].a.a;
}
//...return a;
Комментарий №3 : Насколько я понимаю boost::variant типобезопасен и может хранить не POD типы (Я прав?).
Если так, то сравнивать их только по скорости не очень корректно.
Здравствуйте, Smal, Вы писали:
S>Здравствуйте, Disappear, Вы писали:
D>>Привел тесты. Покритикуйте плиз, если что не так. D>>MSVC 8.1, Northwood P4 3.0Ghz
S>Комментарий №1 : Нельзя использовать имена начинающиеся с подчеркивания за которым следует заглавная буква.
да
S>Комментарий №2 : Этот цикл 100% будет выкинут оптимизатором ибо тут ничего не делается
Это я конечно упустил
Со вторым циклом, стало несколько хуже в сторону variant
Variant time: 60.106
Union time: 2.172
S>Комментарий №3 : Насколько я понимаю boost::variant типобезопасен и может хранить не POD типы (Я прав?). S>Если так, то сравнивать их только по скорости не очень корректно.
Все верно. Но, некоторые компилеры и не POD пропускают.
В C++0x случайно не хотят встроить типобезопысный union?
Здравствуйте, Disappear, Вы писали:
S>>Комментарий №2 : Этот цикл 100% будет выкинут оптимизатором ибо тут ничего не делается D>Это я конечно упустил D>Со вторым циклом, стало несколько хуже в сторону variant
Это я к тому, что в таких случаях нужно смотреть дизассемблер. Ибо порой сложно угадать, что он выкинет.
S>>Комментарий №3 : Насколько я понимаю boost::variant типобезопасен и может хранить не POD типы (Я прав?). S>>Если так, то сравнивать их только по скорости не очень корректно. D>Все верно. Но, некоторые компилеры и не POD пропускают.
Это их проблемы. Деструктор они все-равно звать не будут .
D>В C++0x случайно не хотят встроить типобезопысный union?
ХЗ Я не слышал.