标签: c++ arrays pointers
N3797标准(第3.7.4.3/1节)中提供了可追踪指针对象的以下定义:
可追踪指针对象是 [...] - 一系列元素 窄字符类型数组(3.9.1),其中大小和对齐方式 该序列与某些对象指针类型匹配。
可追踪指针对象是
[...]
- 一系列元素 窄字符类型数组(3.9.1),其中大小和对齐方式 该序列与某些对象指针类型匹配。
理解限制并不简单,我想看一下可追踪指针对象的真实示例。你能提供吗?我一般对排列有疑问。正如我在alignof中看到的那样,char的对齐方式为1,但任何指向类型的指针的对齐方式为8 ...
alignof
char
1
8
答案 0 :(得分:1)
本节的想法是为垃圾收集提供一些支持(参见):只要指向一个对象的指针,它就不会被垃圾收集。在某些情况下,将指针存储在整数(intptr_t)或字节数组中是很常见的。因此,垃圾收集器必须考虑指针类型之外的某些指针的其他表示,然后才能假定对象未被使用。
intptr_t
但是,为了避免垃圾收集器在任意字节偏移处搜索指针而导致它必须进行8而不是1比较,指针不能被任意隐藏。相反,它们只能隐藏在字节数组中,以便字节数组中的指针正确对齐。
请注意,垃圾收集支持是最小的:它几乎不足以允许实现垃圾收集器并为其提供合理的语义。 C ++标准并未强制要求垃圾收集由实现实现,或者对象自动被垃圾收集。但是,C ++存在垃圾收集系统。