gpt4 book ai didi

c# - 引用对象的地址在立即窗口中有效但在编译代码中无效

转载 作者:行者123 更新时间:2023-11-30 22:24:43 26 4
gpt4 key购买 nike

所以我已经多次看到这个关于在 C# 中获取引用对象的物理地址的问题,普遍的共识似乎是这是不可能的,因为你不能调用 GCHandle.AllocGCHandleType.Pinned 这将允许您获取固定对象的地址。

但我觉得奇怪的是,在 Visual Studio 调试器中,我可以将对象从本地窗口拖动到内存调试窗口,并查看引用对象的地址和内存。我什至可以在即时窗口中键入 &obj 并获取对象的实际地址(该地址正确对应于“内存”窗口中显示的地址)。

但是为什么我不能在编译后的代码中进行相同的调用...即:

object someObject = new Object();
&obj; // Compiler Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')

如何允许即时\内存窗口获取托管类型的地址,甚至显示内存布局,但 C# 不能执行任何这些操作?有没有办法在 C# 中获取引用对象的实际地址?

最佳答案

与您自己的代码相比,调试器有很大的优势。它可以在没有代码运行的情况下卡住时查看进程状态。因此获取对象的地址不是问题,垃圾收集器不会运行以使其无效。

关于c# - 引用对象的地址在立即窗口中有效但在编译代码中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com