序列在窄字符类型的数组中

时间:2014-08-06 04:30:15

标签: c++ arrays pointers

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

  

可追踪指针对象是

     

[...]

     

- 一系列元素   窄字符类型数组(3.9.1),其中大小和对齐方式   该序列与某些对象指针类型匹配。

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

1 个答案:

答案 0 :(得分:1)

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

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

请注意,垃圾收集支持是最小的:它几乎不足以允许实现垃圾收集器并为其提供合理的语义。 C ++标准并未强制要求垃圾收集由实现实现,或者对象自动被垃圾收集。但是,C ++存在垃圾收集系统。