问题标签 [object-layout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1369 浏览

c++ - C++ 标准在哪里记录了对象的内存布局?

这是一个大问题,所以我要求提供参考而不是小册子大小的答案。我正在阅读 Stroustrup 的 C++ 之旅,似乎对象的布局方式是内存是许多 C++ 功能设计的基础,例如 POD 与聚合与具有虚拟成员的类。

不幸的是,Tour 本身并没有详细介绍这个主题,并且浏览一些标准参考资料(例如 C++ Primer 5ed 和 TCPPPL 4ed)的 ToC 并没有显示它们是否或在何处涵盖它。

0 投票
3 回答
368 浏览

c++ - C++ 对象布局是否必须静态定义?

更具体地说,假设A是 的可访问基类B,以下代码是否会产生未定义的行为,并且断言是否保证不会根据标准触发?


编辑:我知道所有常见的编译器供应商都以与test. 我正在寻找的是标准中这种行为的保证(隐式或显式)。或者,标准提供的对象存储布局保证范围的合理详细描述,作为不保证此行为的证据,也将被接受。

0 投票
1 回答
513 浏览

c++ - 在什么条件下使用 std::memcpy 在对象之间复制是安全的?

在什么条件下std::memcpy从一个对象复制到另一个对象是安全的?

例如,必须满足什么条件才能T保证以下安全srcdest

我们唯一可以假设srcdest是它们不重叠1。特别是其中之一srcdest可能是对成员或基类的引用。

我对引用标准的答案很感兴趣,但是如果这与通常的做法不同(例如,来自 Itanium 的事实上的 C++ ABI),我也想知道。

请注意,T满足TriviallyCopyable (TC) 概念是不够的,如本例所示。base是 TC 但不是 memcpy 安全的(由于对派生类的成员重复使用填充)。

如果单独存在任何T充分(且不一定是必要)的条件,而不需要srcdest(通常不能静态确定)的条件,我特别感兴趣。


1具体来说,我的假设是,如果它们确实T重叠,那么在与 for相同的条件下,它们仍然可以安全地复制std::memcpy,但可以std::memmove改为使用。如果假设不正确,它可能是答案的一部分。