c++ - 窄字符类型数组中的序列

标签 c++ arrays pointers

N3797 标准(第 3.7.4.3/1 节)提供了以下可追踪指针对象的定义:

A traceable pointer object is

[...]

— a sequence of elements in an array of narrow character type (3.9.1), where the size and alignment of the sequence match those of some object pointer type.

理解限制对我来说并不简单,我想看一下这种可追踪指针对象真实示例。你能提供吗?我一般对对齐有疑问。正如我在 alignof 中看到的那样,char 的对齐方式是 1,但是任何指向类型的指针的对齐方式都是 8...

最佳答案

本节的想法是为垃圾收集提供一些支持(参见 ):只要指向对象的指针一直存在,它就不会被垃圾收集。在某些情况下,将指针存储在整数 (intptr_t) 或字节数组中是很常见的。因此,垃圾收集器必须考虑指针类型之外的某些额外的指针表示,然后才能假定某个对象未被使用。

但是,为了避免让垃圾收集器在任意字节偏移处搜索指针,这将导致它必须进行 8 次而不是 1 次比较,不能任意隐藏指针。相反,它们只能隐藏在字节数组中,这样字节数组中的指针才能正确对齐。

请注意,垃圾收集支持是最小的:允许实现垃圾收集器并赋予它理智的语义是勉强足够的。 C++ 标准不强制垃圾回收由实现实现或对象自动垃圾回收。但是,存在用于 C++ 的垃圾收集系统。

关于c++ - 窄字符类型数组中的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152260/

相关文章:

c++ - 扩展类 c++ 的循环包含问题

c++ - 如何从 C++ 中的另一个实例访问一个实例的信息?

C代码读取包含两列(数字)的文件并用数组打印

python - 计算numpy中值之间的平均加权欧氏距离

c - 为什么这个函数接受 `const char*` 而不是 `char*` 作为参数?

c++ - 将 imagemagick blob 保存到 Node 缓冲区

c++ - 在使用具有模板成员函数的模板类时遇到问题

php - 从 Array1 中的特定行值中减去 Array2 中的行值

c++ - 我在这里做错了什么?使用指向函数 typedef 的指针定义类。

c - 每次迭代都会替换索引中的值