当对象在内存中移动时,指针如何保持有效?

阿维夫·科恩(Aviv Cohn)

想象一下在CI中在堆上分配两个结构。这些结构之一具有一个字段,该字段包含指向另一个结构的指针。

据我所知,堆中的数据可能会移动,因此事物的地址会发生变化。例如,可能会在堆上发生碎片整理,将第二个结构移动到堆中的其他位置。

这有助于了解我在说什么https://en.m.wikibooks.org/wiki/Memory_Management/Memory_Compacting

现在指向该结构的问题是错误的(即持有错误的内存地址)。

我并不是说这个问题是C特有的,而是更笼统的:在任何时候,平台都可能会决定四处移动。指针如何保持有效?

范顿

这里的关键概念是虚拟内存您的指针不是指向物理地址,而是指向进程的虚拟地址空间中的虚拟地址您所说的是正确的,数据可能会四处移动,甚至交换到磁盘上,然后再次映射到物理内存中的另一帧上,但是指针指向的虚拟地址始终保持不变。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何有效地读取和写入太大而无法容纳在内存中的文件?

如何在RN和Android本机屏幕之间保持有关当前堆栈的最新信息?

一个优秀的基于Linux的文本编辑器,具有FTP编辑功能,并能够保持有效的ftp连接

Java VM是否会在内存中移动对象?

C ++:对于哪些对象,“移动”比“保持有效”还重要?

将GZipStream结果分成给定大小的块,使其保持有效

如何在C#中缩短路径并使其保持有效

有没有更有效的方式在CSS中移动元素?

如何使用GHC Haskell在内存中对齐ByteArray#的数组有效负载

Javascript:选择性地从网址中删除哈希(或散列),以使网址保持有效或可用

设置文本字段约束以在屏幕尺寸4.5 in至6.5 in中保持有效

在QGraphicsScene中移动QGraphicItems的有效方法

将对象移动到已分配内存的C ++是否有效?

如何在内存中获取对象?python指针

我如何拒绝通过已建立的TCP连接流过的数据,但套接字连接应保持有效状态。

如何检查指针是否仍指向C ++中的有效内存?

如何有效地将三角矩阵存储在内存中?

如何有效地在bash命令行中移动?

引导程序重置按钮onclick使文本框保持有效

聚合管道的“输出”阶段是否保持有序集合?

角度ng模型在提交后更新父对象并保持有界

反向索引保持有序值

如何回滚一位开发人员所做的更改,以使所有其他更改保持有效?

保持有多少人观看视频的某个部分?

GraphViz - 添加分离边时保持有向图对齐

可以安全地假设(并教导)Python dict 会保持有序吗?

删除引用的对象后引用保持有效多久?

当有可能重新分配内存(更改指针)时,使用“限制”是否有效?

如何在确保指向框的指针保持有效的同时更改盒装结构的字段的值?