为什么C++不让结构更紧凑呢?

2024-02-28

例如,我有一个class,

class naive {
public:
    char a;
    long long b;
    char c;
    int d;
};

根据我的测试程序,a to d一个接一个地建立起来,就像

a-------
bbbbbbbb
c---dddd

-表示未使用。

为什么 C++ 不让它更紧,比如

ac--dddd
bbbbbbbb

标准要求类和结构成员按照声明的顺序存储在内存中。所以在你的例子中,这是不可能的d出现在之前b.

此外,大多数体系结构更喜欢多字节类型在 4 或 8 字节边界上对齐。因此,编译器所能做的就是在类成员之间留下空的填充字节。

您可以通过自己按大小顺序对成员重新排序来最小化填充。或者你的编译器可能有#pragma pack选项或类似的东西,这将寻求最小化填充,但可能会牺牲性能和代码大小。阅读您的编译器的文档。

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

为什么C++不让结构更紧凑呢? 的相关文章

  • 电话号码的正则表达式,不允许全零

    需要您的正则表达式帮助 我当前的正则表达式是 d 8 最小长度为 8 不允许包含字母 特殊字符和空格 我还想禁止全零 如 00000000 Thanks 该模式应该可以满足您的需求 0 d 8 The 0 部分是负前瞻 将阻止仅输入零 Ex
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • 静态类变量与外部变量相同,只是具有类作用域吗?

    在我看来 静态类变量与外部变量相同 因为你只需要declare它在static int x extern int x语句 并在其他地方实际定义它 通常在 cpp 文件中 静态类变量 h file class Foo static int x
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • “int i=1,2,3”和“int i=(1,2,3)”之间的区别 - 使用逗号运算符的变量声明[重复]

    这个问题在这里已经有答案了 int i 1 2 3 int i 1 2 3 int i i 1 2 3 这些说法有什么区别 我无法找出任何具体原因 Statement 1 Result Compile error 运算符的优先级高于 运算符
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个

随机推荐

  • 从命令行激活 gcloud 服务帐号时出错

    我指的是这个网址https cloud google com speech docs getting started https cloud google com speech docs getting started开始使用 google
  • Vue 不是构造函数

    I using webpack 在 chrome 中构建并运行后显示此错误 我不知道如何解决它 我的代码很简单 devDependencies babel core 6 23 1 babel loader 6 3 2 babel plugi
  • 将 XML 注释添加到 LINQ to SQL 设计器生成的类属性

    我使用 Visual Studio 中的 LINQ to SQL 设计器来创建数据库的对象模型 现在 我想向每个生成的属性添加 XML 注释 但我不知道如何在下次刷新 dbml 文件时不删除属性的情况下执行此操作 如何才能做到这一点 我相信
  • 无法从本地主机访问 Django

    这有点奇怪 我无法从本地主机访问 django 但我可以从本地 IP 访问它 python manage py runserver 0 0 0 0 8000 然后当我尝试访问时 我的主机文件 127 0 0 1 lmlicenses wip
  • -bash: ./configure: 没有这样的文件或目录 - MySQL 在 Mac OS X 10.6 上安装

    我正在尝试在 Mac OS X 10 6 上安装 MySQL 下载 MySQL 并使用 tar xzvf mysql 5 1 37 tar gz 解压后 我尝试运行此配置行 configure prefix usr local mysql
  • 使用 popen() 调用 shell 命令?

    当通过 xcode 运行以下代码时 我得到不一致的行为 有时它会正确打印 git 版本 有时它不会打印任何内容 但 shell 命令的返回码始终为 0 关于为什么会这样的任何想法吗 我究竟做错了什么 define BUFFER SIZE 2
  • UIRefreshController 结束动画问题

    当我呼唤self refreshControl endRefreshing 它将 tableView 像它应该的那样恢复到原来的位置 我应该如何对其进行动画处理 以便它能够流畅地返回到原来的位置endRefreshing Try this
  • UINavigationBar - 更改 UIBarButtonItem 位置

    我在我的应用程序中使用 UINavigationController 及其栏 现在我想更改 leftBarButtonItem 和 rightBarButtonItem 的位置 我希望它们位于不同的 x 和 y 位置 具有自定义的宽度和高度
  • 如何选择Eclipse界面语言?

    我安装了 Flash Builder Burrito 版本并将其添加为dropin到我的日食 现在所有的 Eclipse 界面都是法语的 我真诚地热爱我的国家 但是D boguer and 世代相传真的没有那么性感Debug and 构建路
  • 查一下X509Certificate2是否被撤销?

    我怎样才能知道是否X509Certificate2已被撤销 我假设Verify 方法检查它 但它没有在帮助中明确说明 有人知道吗 另外 Verify 是否检查证书是否过期 您是否尝试过使用X509链条 http msdn microsoft
  • 如何找到 Phabricator 对象的 PHID?

    我需要在 Phabricator 安装中获取一个项目和多个用户的 PHID 看来找出如何做到这一点应该是微不足道的 但我搜索了文档却无济于事 我是不是找错地方了还是怎么的 最简单的方法 前往项目 单击新建任务 查看 URL 它会有一个参数
  • C++ 中的 const 运算符重载问题

    我在使用 const 版本重载 operator 时遇到问题 include
  • C函数判断IP地址是否为多播地址

    如果用户输入一些IP地址 例如 239 4 4 4 我如何使用linux C中可用的任何函数确定该IP地址是多播的 IPv4 多播地址由最高有效位定义1110 so 如果IP地址存储为32位unsigned变量 应用 gt gt 28到变量
  • 如何使用 vb.net 比较字符串的百分比匹配?

    我用头撞墙有一段时间了 现在正在尝试不同的技术 它们都工作得不好 我有两根弦 我需要比较它们并获得准确的匹配百分比 IE 四分和七年前 TO 对于分数和七年前 好吧 我首先将每个单词与每个单词进行比较 跟踪每个命中 然后百分比 count
  • .NET 4 ISet<> HashSet<> 可以替代 NHibernate Iesi.Collections ISet 、 HashSet 吗?

    NET 4 ISet HashSet 可以替换 NHibernate Iesi Collections ISet HashSet 吗 我正在使用 Castle 代理和 NHibernate 3 0 是的 有两种方法 将您的收藏声明为ICol
  • 是否可以使用变量动态更改代码中的类名称?

    我有这个功能 NSString getId id id field withColumn int test column withTable NSString tableName renvoyer le label NSError erro
  • 为什么结构化绑定禁用 RVO 并移动 return 语句?

    假设我们有一个名为AAA支持两者复制 移动 class AAA public AAA default AAA default AAA const AAA rhs std cout lt lt Copy constructor lt lt s
  • 如何从参数哈希中安静 image_submit_tag?

    有谁知道当您将 image submit tag 与 get 方法一起使用时如何消除 x 和 y 参数 我有一个简单的搜索表单 并使用 get 传递 url 中的值 当我使用 image submit tag 时 它还会附加 x 和 y 坐
  • 显示 django 表单错误消息而不仅仅是字段名称

    我有一个表单 我想在 for 循环中显示错误 for error in form errors tr td error td tr endfor 通过这样做 error 只包含有错误的字段名称 但不包含错误消息 如何显示错误消息 您可以通过
  • 为什么C++不让结构更紧凑呢?

    例如 我有一个class class naive public char a long long b char c int d 根据我的测试程序 a to d一个接一个地建立起来 就像 a bbbbbbbb c dddd 表示未使用 为什么