vb.net - VB.NET 静态变量存储在哪里?

标签 vb.net memory-management virtual shared

这个问题在这里已经有了答案:





When is a static variable created?

(3 个回答)


去年关闭。




我想知道 VB.NET 局部静态变量在程序的虚拟地址空间中的存储位置,以及子例程/方法如何在调用之间保留其值?

为了了解进程的 VB.NET 虚拟地址空间,我在网上进行了广泛的搜索。有很多关于在 Linux 上运行的 Java 和 C 的图表和解释,其中包括虚拟内存中称为“共享”或“数据”的区域,但很难找到专门关于 VB.NET 的内容。就我所见,.NET 没有利用名为“共享”的进程的虚拟地址空间中的区域。我的问题是,局部静态变量的数据存储在哪里,子例程/方法如何在每次调用之间重新获得对它的访问?直观地,我假设共享变量的数据存储在堆之一(LOH 或 SOH)上,具体取决于大小,并且子例程/方法在其堆栈上有对此的引用。但是如果子程序结束,堆栈帧被移除并且引用丢失。它如何重新获得这个引用?

最佳答案

C++ 和 C# 静态变量有点不同,例如在 C# 编程语言中,您只能使用类成员静态变量(C++ 允许全局静态变量,以及函数局部的静态变量)。
有关内存分配的一些详细信息,您可以查看,例如:“静态关键字揭秘”[^] (C#),静态变量存储在哪里(在 C/C++ 中)?[^] (C++)。

关于vb.net - VB.NET 静态变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005079/

相关文章:

vb.net - 在 Exchange 服务器上验证电子邮件地址

vb.net - 为什么使用公共(public)属性而不是函数来公开自定义集合<T>

objective-c - 我是否需要释放由 CFUUIDCreateString() 创建的 NSString?

c++ - 是否有不会隐式释放内存的 STL 分配器?

linux - 在 linux 内核中,对 kfree 的调用会休眠吗?

C++ : inheritance without virtuality

C++虚方法的虚继承

vb.net - 在 vb.net 中获取命令行参数的最佳方法是什么

c++ - 如何为二进制兼容的可扩展性设计 C++ API

vb.net - 在vb.net中移动一些具有相同扩展名的文件