首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何存储类属性/字段

如何存储类属性/字段
EN

Stack Overflow用户
提问于 2015-07-21 07:57:10
回答 1查看 962关注 0票数 8

我知道这个C++类的一个实例:

代码语言:javascript
运行
复制
class A {
   char c;
   int iiii;
   short ss;   
};

在内存中是这样的:c| | | |i|i|i|i|s|s| | |

这个4/2的字母注释没有任何意义(但我认为我的观点很清楚)

1 byte for char3 bytes of padding4 bytes of int2 bytes for the short2 bytes of tail padding (平台依赖者,但它不会改变逻辑)

从C++标准(编译器不会更改示例中字段的顺序):

分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便以后的成员在类对象中具有更高的地址。具有不同访问控制的非静态数据成员的分配顺序未指定(第11条)。实现对齐要求可能导致两个相邻的成员不能在彼此之后立即分配;管理虚拟函数(10.3)和虚拟基类(10.1)所需的空间也可能是这样。

所以,我想知道Java类是否是相同的,编译器可以改变顺序来减少填充吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 09:45:30

首先来看一下在运行时,Java对象在内存中的样子是什么?了解您的Java对象内存布局

但我想Java对象内存结构回答了你的问题。

为了节省一些内存,Sun没有按照声明对象的顺序排列对象的属性。相反,属性是按以下顺序在内存中组织的: 双倍和长整数,浮点数,短路和字符,布尔和字节引用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31533360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档