想象一下在CI中在堆上分配两个结构。这些结构之一具有一个字段,该字段包含指向另一个结构的指针。
据我所知,堆中的数据可能会移动,因此事物的地址会发生变化。例如,可能会在堆上发生碎片整理,将第二个结构移动到堆中的其他位置。
这有助于了解我在说什么https://en.m.wikibooks.org/wiki/Memory_Management/Memory_Compacting
现在指向该结构的问题是错误的(即持有错误的内存地址)。
我并不是说这个问题是C特有的,而是更笼统的:在任何时候,平台都可能会决定四处移动。指针如何保持有效?
这里的关键概念是虚拟内存。您的指针不是指向物理地址,而是指向进程的虚拟地址空间中的虚拟地址。您所说的是正确的,数据可能会四处移动,甚至交换到磁盘上,然后再次映射到物理内存中的另一帧上,但是指针指向的虚拟地址始终保持不变。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句