为什么空基类优化 (EBO) 在 MSVC 中不起作用?

2024-03-17

为什么空基类优化(EBO)在Visual C++中没有得到充分应用?

如果我有很多基类,我有什么办法可以帮助编译器进行这种优化吗?

#include <iostream>

struct T1 { };
struct T2 { };
struct T3 { };
struct T4 { };
struct T5 { };
struct T6 { };

struct Test : T1, T2, T3, T4, T5, T6 { };

int main() { std::cout << sizeof(Test); }   // Prints 5

这是 Visual C++ 编译器中长期存在的错误。当一个类派生自多个空基类时,只有初始空基类将使用空基优化 (EBO) 进行优化。

2006 年 Microsoft Connect 上报告了此问题:空基地优化无法正常工作。 https://connect.microsoft.com/VisualStudio/feedback/details/100686/empty-member-optimization-not-working-properly目前,旧的错误在 Microsoft Connect 上不可见。我被告知这是一个暂时的问题,但我不知道什么时候能解决。同时,以下是 Jonathan Caves(Visual C++ 编译器团队的开发人员之一)对该错误的回应:

您好:不幸的是,尽管这是 Visual C++ 对象模型中的一个错误,但我们目前无法修复它,因为修复它可能会破坏许多现有程序,因为对象的大小会发生变化。希望将来我们能够解决这个问题,但不能在产品的下一个版本中解决。

感谢您报告问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么空基类优化 (EBO) 在 MSVC 中不起作用? 的相关文章

随机推荐

  • 插件Android支持异常,Worker因异常退出

    我刚刚在 Linux 上更新到 Android Studio 2 2 2 稳定版 现在经常崩溃 已经尝试过 使缓存无效 重新启动 清洁工程 删除 gradle 缓存 rm gradle caches rf 删除 Android Studio
  • 如何将 sitemap.xml 添加到 angularJS 站点?

    我在应用程序文件夹中添加了 sitemap xml 但如何将其公开以便谷歌网站管理员工具可以获取它 Thanks 来自谷歌的文档 有两种不同的方法可以让 Google 可以使用您的站点地图 OR 插入 在 robots txt 文件中的任意
  • 通过指针访问是否会改变严格的别名语义?

    有了这些定义 struct My Header uintptr t bits struct Foo Type struct My Header header int x struct Foo Type foo struct Bar Type
  • 信号栈

    我确实读到信号需要有一个单独的堆栈 您认为它为什么以及如何实现 它们是动态分配还是静态分配 内存分配是如何完成的 所有信号都一样吗 信号需要单独堆栈的原因是 如果正常堆栈损坏或溢出 信号仍然可以执行 我认为信号堆栈通常是动态分配的 但它可以
  • htmlspecialchars_decode() 不适用于空格

    我正在尝试使用 htmlspecialchars decode 但它不解码 nbsp 进入空间 这个问题有解决办法吗 My code query mysql query select from nowosci order by id des
  • 如何使用 Django/nginx 部署仅 HTTPS 的站点?

    我原来的问题是如何为 Django 登录页面启用 HTTPS https stackoverflow com questions 8015685 how to enable https in django auth generated pa
  • 如何使用 Selenium WebDriver 获取 HTTP 响应代码

    我已经使用 Selenium2 WebDriver 编写了测试 并且想要测试 HTTP 请求是否返回 HTTP 403 Forbidden 是否可以使用 Selenium WebDriver 获取 HTTP 响应状态代码 一句话 不 使用
  • 将图像图标添加到按钮/标签 Swing

    我知道这个问题已经发布了 但我已经尝试了我发现的所有内容 但没有任何效果 我有一个 Maven 项目 我想在按钮上使用图像 我把图像放在src main res folder Maven clean Maven 安装后 我的所有图像都可以在
  • 对对齐的 malloc 实现的解释

    这不是作业 这纯粹是为了我自己的个人教育 我不知道如何实现对齐的 malloc 所以在网上查找并发现这个网站 https sites google com site ruslancray lab bookshelf interview ci
  • 始终排除在 SVN for Netbeans 中提交的文件夹

    我使用Netbeans 7 0和内置的SVN客户端进行开发 我希望始终从提交 更新中排除某些文件和文件夹 例如 缓存 或 日志 因为它们对于存储库本身并不重要 我没有找到任何设置来执行此操作 而且 Netbeans 也没有在其常见问题解答中
  • MySQL 在没有缓存的情况下增强性能

    我正在使用 MySQL 版本 5 5 14 从 500 万行的表运行以下查询 SELECT P ID P Type P Name P cty X P latlng as lat Y P latlng as lng P cur P ak P
  • JSDoc 和 JavaScript 单例文档

    我有一个 JavaScript 单例定义为 A description here class com mydomain ClassName function constructor lends com mydomain ClassName
  • 带有包含路径和源路径的 CMake - 基本设置

    我正在尝试建立一个看起来像我自己的项目的测试项目 只是为了让事情首先正常工作 它看起来像这样 MainProject inc main h MainProject src main cpp LibProject inc test h Lib
  • Codemagic IOS 构建需要很长时间才能完成

    我正在尝试在 Codemagic 上设置我的 flutter 应用程序 但为 IOS 构建大约需要 40 50 分钟 日志显示是compiling files c and cc 有很多这样的文件正在编译 有没有办法让构建速度更快 我是否缺少
  • 轻量级的 Scala fork join 语法

    尽管即将推出 java 7 标准 fork join 框架 但我正在构建一些语法轻量级的辅助方法 以便客户端并行运行代码 这是一个可运行的 main 方法来说明这个想法 import actors Futures object ForkTe
  • 如何将值从一种形式传递到另一种形式?

    考虑一下我有两个窗口窗体的情况 比如说F1 and F2 使用后F1 我现在已经打电话了F2 ShowDialog 这使得F2也在屏幕上 现在两种形式都可见 我如何从F1 to F2 另外 有一次F2 模态对话框 结束 如何返回数据F1 有
  • Android canvas drawText 文本的 y 位置

    我正在使用 Canvas 创建一个带有一些背景和一些文本的 Drawable 该可绘制对象用作 EditText 内的复合可绘制对象 文本是通过在画布上的 drawText 绘制的 但在某些情况下 我确实对绘制文本的 y 位置存在问题 在这
  • 我从哪里开始组装?

    嘿 我会用 C 语言编程 会一点 Python 和 Pascal 我真的很想学习汇编 我今年 18 岁 高中毕业 编程是 我的爱好 因为学业确实不是什么挑战 我下载了几本关于汇编的书籍 它们是 汇编的艺术 初学者的汇编 完全初学者的汇编和
  • Android 媒体记录器停止异常

    我正在从 Android 媒体录音机录制视频和音频 我正在检查剪辑长度 如果少于 2 秒 请删除它 但问题是 如果我从文件路径检查文件的持续时间 MediaRecorder 每次抛出异常后都会抛出异常 即使我录制 10 秒的音频 但是当我评
  • 为什么空基类优化 (EBO) 在 MSVC 中不起作用?

    为什么空基类优化 EBO 在Visual C 中没有得到充分应用 如果我有很多基类 我有什么办法可以帮助编译器进行这种优化吗 include