结构中的内存布局差异

2024-06-20

我在 C++ 中有以下结构

struct A {
  int a;
  double b;
  float c;
}

该结构与添加了函数的结构之间的内存布局是否存在差异?

struct B {
  int a;
  double b;
  float c;
  void foo();
}
B::foo() { //do stuff }

C++ 标准保证 C 结构体和 C++ 类(或结构体——相同的东西)的内存布局将是相同的,前提是 C++ 类/结构体符合 POD(“纯旧数据”)的标准。那么POD是什么意思呢?

如果满足以下条件,则类或结构是 POD:

所有数据成员都是公共的,并且它们本身是 POD 或基本类型(但不是引用或指向成员的指针类型),或此类的数组

  • 它没有用户定义的构造函数、赋值运算符或析构函数
  • 它没有虚函数
  • 它没有基类

所以是的,在你的情况下,内存布局是相同的。

Source: 内存中 C++ 对象的结构与结构 https://stackoverflow.com/questions/422830/structure-of-a-c-object-in-memory-vs-a-struct

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

结构中的内存布局差异 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 在 VScode 中使用箭头键导航文件资源管理器时立即打开文件

    Currently I navigate the file tree in VScode with arrow keys and have to press Cmd Down to display the file in the edito
  • 除了使用 MaxBackupIndex 之外,我们还可以删除 log4j 中早于特定天数的日志吗

    我在我的应用程序中使用 log4j 并且使用该框架生成日志 我想删除超过 10 天的日志 因为日志大小正在迅速增加 我知道 MaxFileSize 和 MaxBackupIndex 通常会根据生成的文件数量进行删除 但我的要求是删除早于特定
  • Java中有默认的数字类型吗

    如果我写这样的东西 System out println 18 哪种类型有 18 是吗int or byte 或者它还没有类型 它不能是 int 因为这样的东西是正确的 byte b 3 这是不正确的 int i 3 byte bb i e
  • 如何以最低的价格优化购物车?

    我有一个我想买的物品清单 这些商品由不同的商店提供 价格也不同 商店有单独的送货费用 我正在寻找一种最佳的购物策略 以及支持它的java库 以最低的总价购买所有商品 Example 商品 1 在 Shop1 的售价为 100 美元 在 Sh
  • 如何使用 virtualenv 部署具有依赖项的 python webapp?

    我正在寻找一种将用 Python 编写的 Web 应用程序自动部署到服务器的方法 我想用虚拟环境为该应用程序提供一个干净的环境 然而 我想知道部署到服务器时如何管理依赖关系 在开发过程中 我有一个虚拟环境我在其中使用安装外部库pip 所以我
  • 当 Mission Control 启动时,如何隐藏我的 Electron 应用程序窗口?

    我正在构建一个 Electron 应用程序 但我不希望我的应用程序出现在 macOS Mission Control 中 有没有办法在任务控制启动时隐藏窗口 我能够通过使用来实现此行为setAlwaysOnTop窗口对象上的方法 windo
  • python 中带有 lambda 函数字典的奇怪行为

    我编写了一个用于生成 lambda 常量函数字典的函数 它是一个更复杂函数的一部分 但我已将其简化为下面的代码 def function a interpolators for key in a keys interpolators key
  • 将可移植类库(DLL 形式)添加到 Xamarin Studio

    我已经使用 Visual Studio 2012 构建了一个可移植类库 该库也将在 Xamarin Studio 中构建 我想将从该 PCL 从解决方案的 bin 目录 构建的 DLL 添加到 Xamarin Studio 5 3 中的现有
  • type_info 的 std::is_convertible

    在 C 11 中 可以通过以下方式确定类型 A 的变量是否可以隐式转换为类型 B using std is convertible
  • 获取微过滤器驱动程序中的文件路径

    我使用了下面的代码 但它给了我文件路径的结果 status FltGetFileNameInformation Data FLT FILE NAME OPENED FLT FILE NAME QUERY ALWAYS ALLOW CACHE
  • Flexbox 不适用于 iPad 和 Safari [重复]

    这个问题在这里已经有答案了 我在网站上使用 Flexbox 但它在 iPad Air iPad 3 和 Safari PC 上崩溃 设计和代码与此 codepen 类似 http codepen io anon pen xwJzEg htt
  • 您会认为这是单例/单例模式吗?

    想象一下 在 Global asax cs 文件中 我有一个实例类作为私有字段 我们这样说 private MyClass myClass new MyClass 我在 Global 上有一个名为 GetMyClass 的静态方法 它获取当
  • 如何清除浏览器的缓存?

    当我在 Facebook 上玩应用程序且游戏未加载时 会出现提示 要求清除浏览器缓存 如何清除浏览器的缓存 似乎还没有人提到这一点 所以我想我应该插话一下 当你在 Chrome 中打开页面检查器时 你可以右键单击重新加载页面图标将与菜单一起
  • JQuery hide() 和 fadeOut() 、 show() 和 fadeIn() 之间的区别

    我是 jQuery 新手 目前 我正在我的跨平台移动应用程序之一中使用 jQuery 我需要根据各自的条件隐藏和显示我的一些页面内容 我发现以下两种方法对我来说效果很好 myControlId fadeOut myControlId hid
  • 使用递归返回嵌套列表中第二小的数字

    我必须归还第二小的使用递归的 python 列表中的数字 以及no loops 我所做的是创建一个辅助函数 它返回列表中 最小 第二小的 值的元组 然后我只取tuple 1 in my second smallest func def s
  • 检测 Angular 项目中的浏览器刷新

    我想使用我的路由器来检测页面何时刷新单页应用程序 https en wikipedia org wiki Single page application 角度项目 还有其他方法吗 In the 组件 ts file import Subsc
  • ESLint 关闭分号规则

    当我搜索关闭分号时 我得到 semi 0或类似的 我尝试将其放入 但我的 linter 仍然在行上添加了分号 下面是我的 eslintrc 我很困惑哪条规则放置了分号 parserOptions ecmaVersion 8 ecmaFeat
  • 允许在 conda env 中使用系统 python?

    有没有办法强制 conda 在给定环境中使用 python 的系统版本 以及所有系统库 我在 shell 中默认启用了 conda 这可能会有点烦人 因为如果我尝试运行系统 python 应用程序 它会获得与预期不同的 python 版本
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • 结构中的内存布局差异

    我在 C 中有以下结构 struct A int a double b float c 该结构与添加了函数的结构之间的内存布局是否存在差异 struct B int a double b float c void foo B foo do