63得票3回答
C和C++中的结构体对齐

最近一次面试中,我被问及有关C++结构体字段对齐的问题,并推测C和C++在结构体打包方面采用了相同的策略。 然而,这是错误的假设。面试官说,通常情况下,C和C++在结构体打包方面采用不同的方式,我们永远不应该期望相反的结果。在我看来,这是一个奇怪的陈述。在C++中,没有适用于双语C/C++头...

52得票3回答
Java对象头包含什么内容?

你能给我一些关于对象头中究竟存储了什么信息的资料吗?我知道这可能取决于JVM,但至少对于HotSpot呢?我正在寻找特别是第一行的精确描述。 我已经阅读了几篇无法通过我发现的信息进行正面验证的文章。也许你有一个链接到OpenJDK wiki的页面可以解释这些内容呢?

28得票4回答
当int64_t更改为int32_t时,为什么类大小会增加?

在我的第一个例子中,我使用了两个int64_t位域。当我编译并获取类的大小时,得到的大小为8。class Test { int64_t first : 40; int64_t second : 24; }; int main() { std::cout <&lt...

16得票5回答
数据成员是否形成一个范围?

我可以将同类型的连续数据成员视为一个范围吗?例如:struct X { int a, b, c, d, e; }; X x = {42, 13, 97, 11, 31}; std::sort(&x.a, &x.a + 5); // kosher?

14得票4回答
C++中的虚拟继承

我在阅读有关C++虚继承的网站时发现了这个问题。 当使用多重继承时,有时需要使用虚拟继承。一个很好的例子是标准iostream类层次结构://Note: this is a simplified description of iostream classes class ostream:...

11得票3回答
C++对象布局是否必须静态定义?

更具体地说,假设B是可访问的基类A,下面的代码是否产生未定义行为,并且按照标准,断言是否保证不会触发?void test(B b1, B b2) { A* a2 = &b2; auto offset = reinterpret_cast<char*>(a2) - r...

7得票2回答
为什么即使每个字段都是4字节对齐,Java对象中仍存在内部碎片?

简介: 我使用了 JOL (Java Object Layout) 工具对 Java 对象的内部和外部碎片进行了分析,以进行研究目的。 在这个过程中,我发现了以下内容: x@pc:~/Util$ java -jar jol-cli-0.9-full.jar internals sun.r...