Denis Bredun Asked:2020-07-19 08:49:31 +0000 UTC2020-07-19 08:49:31 +0000 UTC 2020-07-19 08:49:31 +0000 UTC 指针存储在哪里? 772 有一个代码: int a = 6; int* b = &a; 所以问题是:指针 b 存储在哪个内存中?在堆栈上? c# 1 个回答 Voted Best Answer return 2020-07-19T16:02:13Z2020-07-19T16:02:13Z C# 中的局部变量可以存储在寄存器中或堆栈中。 堆栈比寄存器“慢”,但它更大(在 Windows 上通常为 1 MB),您可以从堆栈上的变量中获取地址;您还可以在堆栈上存储任何大小的变量。在您的情况下,变量a存储在堆栈中,因为 next. 行你拿她的地址。 寄存器比堆栈快,但它们更小(大小取决于处理器,通常 <100 字节)并且您不能从寄存器中的变量中获取地址;寄存器还可以存储 2、4 和 8 字节大小的变量(几乎总是指针的大小)。也就是说,变量b很可能存储在寄存器中。 为什么是“最有可能”?事实是我们并不直接控制变量的分布——这是由编译器完成的(IL → Native,C# → IL 编译器只是添加了pushIL 指令),并且由于每个平台的编译器实现都是唯一的( .NET 有自己的,Mono 有自己的等等),然后它可以在b任何地方定位变量,但很明显(至少在 .NET 中)它很可能会在寄存器中定位它。 兴奋剂(附加信息) 寄存器 堆 缓存
C# 中的局部变量可以存储在寄存器中或堆栈中。
堆栈比寄存器“慢”,但它更大(在 Windows 上通常为 1 MB),您可以从堆栈上的变量中获取地址;您还可以在堆栈上存储任何大小的变量。在您的情况下,变量
a
存储在堆栈中,因为 next. 行你拿她的地址。寄存器比堆栈快,但它们更小(大小取决于处理器,通常 <100 字节)并且您不能从寄存器中的变量中获取地址;寄存器还可以存储 2、4 和 8 字节大小的变量(几乎总是指针的大小)。也就是说,变量
b
很可能存储在寄存器中。为什么是“最有可能”?事实是我们并不直接控制变量的分布——这是由编译器完成的(IL → Native,C# → IL 编译器只是添加了
push
IL 指令),并且由于每个平台的编译器实现都是唯一的( .NET 有自己的,Mono 有自己的等等),然后它可以在b
任何地方定位变量,但很明显(至少在 .NET 中)它很可能会在寄存器中定位它。兴奋剂(附加信息)