c++ - 对象/结构等的 C++ 内存布局是什么?

标签 c++ compiler-construction

在 C++ 中,就内存布局而言,我认为 C++ 标准与数据成员在类中的排列方式无关?我认为这取决于所讨论的编译器是否正确?

我对学习对象和其他 C++ 实体(结构等)如何在物理内存中表示非常感兴趣(我知道列表是节点到节点,数组是连续内存——但语言的所有其他方面) .

编辑:学习 x86 汇编程序是否有助于此并更好地理解 C++?

最佳答案

C++ 标准确实指定了一些内容,但远非所有内容。

主要规则如下:

  • 数组中的对象是连续放置的,它们之间没有填充。
  • 类成员对象由访问说明符分隔(public:/private:/protected:)按照声明的顺序排列在内存中,但成员对象之间可能有未指定数量的填充。
  • 对于某些类型(标准布局结构,在标准术语中),第一个基类,或者如果不存在,则第一个成员被布置在与类本身相同的地址。

标准还规定了一些细节,但总的来说,剩下的细节实际上取决于编译器。

关于c++ - 对象/结构等的 C++ 内存布局是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884933/

相关文章:

c - 轻量级且可扩展的 C 编译器前端

c++ - 引用抽象类类型的结构

c++ - 仅将应用程序提交到架构为 armv7s 及更高版本的应用程序商店。

compiler-construction - Haskell 脱糖策略

java - 枚举超过静态初始化程序的 65535 字节限制......最好做什么?

C 以与 Java Compiler Api 7 相同的方式动态加载代码

c++ - 如何访问 MFC 中主对话框的元素?元素是在可视化编辑器 VS 2012 中创建的

c++ - 程序错误 "error C3861: ' copyString' : identifier not found", 请告诉我为什么?

c++ - 使用 C/C++ Socket 模拟网络条件

compiler-construction - 使用程序进行短路评估