C# 如何通过变量查找分配的内存?
可以通过C# 如何通过变量查找分配的内存?,c#,c++,c,windows,C#,C++,C,Windows,可以通过x变量获取分配的内存地址吗 示例可以是C、C++、C#或D。 我希望这是清楚的 在C和C++中提前感谢 < P>这是相当直接的。我将用C++给出示例: class app { public int x = 3; static void Main(string[] args) { } } 当然没有“变量App::x”这样的东西,因为App只是类型。此类型的每个实例(例如示例中的a)都携带自己的成员变量集,并且很容易获得指
x
变量获取分配的内存地址吗
示例可以是C
、C++
、C#
或D
。
我希望这是清楚的
在C和C++中提前感谢 < P>这是相当直接的。我将用C++给出示例:
class app {
public int x = 3;
static void Main(string[] args)
{
}
}
当然没有“变量App::x
”这样的东西,因为App
只是类型。此类型的每个实例(例如示例中的a
)都携带自己的成员变量集,并且很容易获得指向成员变量的指针。(C中的普通数据结构也是如此。)
<>注意C++有另一个相关的特征:成员指针。这允许我们形成不透明值int-App::*pm=&App::x
,它本身并不指向任何东西,但只携带类内App::x
偏移量的信息(如果需要)。此动物可与实例一起使用以获取实际值,例如,a.*pm
在大多数类似C的语言中,符号(&
)是运算符的“地址”:
struct App
{
int x;
App() : x(3) { }
};
int main()
{
App a;
int * p = &a.x; // address goes here
}
&
的返回值实际上是其操作数的a。跳过D和E.C#和F#(以及其他CLR语言)-一般来说,任何局部变量都没有固定的地址。可以使用托管调试器(即WinDbg+SOS)查找任何特定变量的地址,或者与互操作类一起使用fixed
添加:只有当变量驻留在堆上时,才需要fixed。做一个整数i=0;int*pi=&i;在不安全代码中完全有效进一步添加:fixed
仅当变量驻留在托管堆上时才需要。在互操作场景中,您还拥有本机Win32堆,并且堆上的所有变量都是固定的。有人想更详细一点吗?我的回答没有错。
int x;
printf("Address of x is %p\n", &x);