Драйверы, системное программирование и все, что с этим связано.
MS C/C++ Compiler и EBCO при множественном наследовании
Запись от Убежденный размещена 24.08.2017 в 16:43
Показов 4363
Комментарии 0
Только что с удивлением узнал, что мой любимый компилятор MS C/C++ Compiler из Visual Studio не умеет выполнять оптимизацию 'Empty Base Class Optimization' (EBCO) для ситуаций с множественным наследованием. EBCO может быть полезна, когда ваш класс наследует несколько пустых классов (пустой класс - т.е. класс без данных), например для каких-то ограничений или реализаций. Пример:
присваивание одного Test другому будет выдана ошибка компиляции. Все это давно и хорошо известно. Но каким будет размер Test? Логика подсказывает, что на "нормальных" компиляторох это будет sizeof (ptr), т.е. sizeof (void *). Так и есть. А теперь включим множественное наследование:
Проверено на VS2008 SP1 и на VS2015 Update3, конфигурация Release со всеми оптимизациями. Насколько я знаю, GCC и Clang, а, возможно, и Intel тоже, давно умеют и делают EBCO в таких ситуациях (проверки на codepad, ideone и rextester это подтверждают). Единственное, хотя и слабое утешение - в VS2015 Update2 есть малоизвестная опция '__declspec(empty_bases)', которую со временем хотят сделать поведением по умолчанию. Будем ждать... Ссылка в тему: Optimizing the Layout of Empty Base Classes in VS2015 Update 2 https://blogs.msdn.microsoft.c... pdate-2-3/ |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии