c# - 什么是固定对象?

标签 c# memory garbage-collection

我正在尝试使用 ants 内存分析器查找内存泄漏,我遇到了一个新术语:

固定对象。

谁能给我一个简单明了的关于这些对象是什么的解释,我如何固定/取消固定对象,并检测谁固定了对象?

谢谢

最佳答案

固定对象是不允许移动的对象。垃圾收集器通常会压缩内存,因为它将所有对象移动到“一个或多个集群”。这是为了创建大块的可用空间。

这基本上意味着如果其他人(外部)有一个指向对象内存地址的指针,这可能指向随机内容 - 因为对象已经移动。

固定一个对象告诉 GC 不要移动它。这通常是无用的,只有在使用指针时才有意义——比如在使用 PInvoke 时。有时您需要将地址转入结构(在内存布局术语中),如果这是在类中实现的,则必须将其固定。

具体回答:

  • 您无法找出谁固定了一个对象。
  • 固定是通过 FIXED 语句完成的。这仅允许在不安全的代码中使用。

检查:

http://msdn.microsoft.com/en-us/library/f58wzh21%28VS.80%29.aspx

关于c# - 什么是固定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2490912/

相关文章:

c# - GUID 在 C++ 中的使用 :

c# - 动态 PropertyGrid 属性

linux - 64 位 linux 上 32 位进程的地址空间

Tomcat WebappClassloader 未被垃圾收集

c# - 对象没有得到垃圾收集

c# - 什么是 __argvalue?

Exchange 2013 上的 C# EWS Api : Get an attachment into a Stream

java - 内存使用本地变量而不是内联 Java

linux - Linux 上缓存和缓冲内存之间的区别

linux - Linux内核中virt_to_phys和CPU的MMU是什么关系?