JavaScript 示例:
假设我这样做:
var i;
并且永远不要在程序的其他任何地方使用 i 。会分配内存吗?
或者如果我使用,在几行之后说i=2;
...此时会分配内存,还是在创建i期间分配内存?
C# 示例:
假设我这样做:
dynamic i;
并且永远不要在程序的其他任何地方使用 i 。它会被分配任何内存吗(如果会的话,什么时候?在编译期间?)?
或者如果我使用,则说 i=2;几行之后....此时是否会分配内存,或者是在创建 i 期间分配的内存,还是在编译期间分配的内存?
此外,除了 JavaScript 是解释型语言而 C# 是编译型语言而产生的差异之外,上面两个示例中的内存分配是否还有其他差异?
最佳答案
在 C# 中,表达式:
var i;
一开始就无法编译;如果我们考虑一下:
int i; // or dynamic i;
然后可以编译,并且可能会也可能不会保留,但这取决于它是字段(对象变量)还是本地(方法变量) 。字段不会被删除;但是,编译器可以根据需要自由删除局部变量。是否选择这样做可能取决于很多因素,但最值得注意的是:您是否正在执行优化的发布构建,而不是调试构建。即使局部变量显然已被写入和读取,编译器仍然可以选择将其删除 - 当然,值仍将存在于堆栈中,但不在保留位置中。
关于javascript - 未初始化的变量内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362633/