【发布时间】:2015-04-05 11:22:40
【问题描述】:
//Consider this declaration
string name;
这里的字符串变量name是一个未赋值的变量,如果没有初始化,这个声明是否为name保留任何内存?
【问题讨论】:
-
如果它没有在任何地方使用它可能会被编译器剥离
-
这通常是声明变量的作用,但如果它从未使用过,编译器可能会将其优化掉。
-
是类字段还是局部变量?答案因您使用代码的地方而异。
-
使用 ILSpy,我可以确认
string name;和string name = "Test";已针对 DEBUG 和 RELEASE 构建进行了优化,如果它们没有在方法中的其他地方使用。 -
@JasonEvans 不一定。如果它是
private并且从未从类中读取,则编译器实际上可以确定它未被使用。或者如果该字段是internal并且从未在程序集中的任何地方访问过。如果它是公开的,那么它就需要在那里。
标签: c# variables memory memory-management unassigned-variable