例如
while(true)
{
Console.Write("1");
}
就会不断输出1。
但是,把声明变量放在循环体内
while(true)
{
int a;
}
是不是会不断地声明a这个变量?
如果不是的话,编译器是怎么处理在循环内部声明变量的?
13 个解决方案
#1
while(true)
{
int a;
}
是不是会不断地声明a这个变量?
-=--------------------------
是。
但这个变量的生存期限在while{}循环体内,}后,回收...
{
int a;
}
是不是会不断地声明a这个变量?
-=--------------------------
是。
但这个变量的生存期限在while{}循环体内,}后,回收...
#2
不会,编译器会自动优化……
#3
这样好像会报错的吧!!!
如果不会 同意csShooter
如果不会 同意csShooter
#4
不会重复声明
#5
会不断声明,因为是局部变量,所以也不断回收...
#6
C#语法规定就是所有变量的生命期在{...}之内,出去就被垃圾回收器吃掉了,因此循环内的定义在每次循环时都会循环着定义+回收。
#7
up
#8
谢谢大家^-^
我做了一个测试,有两个发现:
1、不管循环多少次,在循环体内部声明的变量所使用的内存地址,仍旧是第一次给它分配的地址。由此可见,不会每次循环都重新声明、回收。
2、就算是循环结束了,循环体中声明的变量也不会被立刻回收。
我做了一个测试,有两个发现:
1、不管循环多少次,在循环体内部声明的变量所使用的内存地址,仍旧是第一次给它分配的地址。由此可见,不会每次循环都重新声明、回收。
2、就算是循环结束了,循环体中声明的变量也不会被立刻回收。
#9
Ivony() 和 ldp333(小李飞飙)
答案是看什么资料有的?能告诉我吗?
我不想每次都花时间做测试,而且不一定准.
答案是看什么资料有的?能告诉我吗?
我不想每次都花时间做测试,而且不一定准.
#10
这个是由编译器负责优化的,你想看资料的话,就去看一些计算机原理和编译原理!
#11
lvony,不好意思,看错名字了,只给你两分,下次有机会补给你啊_!
#12
有没有专门说c#编译器的工作原理的?
#13
可以查看编译后的IL即知……
.NET的编译器在这方面很强的……
.NET的编译器在这方面很强的……
#1
while(true)
{
int a;
}
是不是会不断地声明a这个变量?
-=--------------------------
是。
但这个变量的生存期限在while{}循环体内,}后,回收...
{
int a;
}
是不是会不断地声明a这个变量?
-=--------------------------
是。
但这个变量的生存期限在while{}循环体内,}后,回收...
#2
不会,编译器会自动优化……
#3
这样好像会报错的吧!!!
如果不会 同意csShooter
如果不会 同意csShooter
#4
不会重复声明
#5
会不断声明,因为是局部变量,所以也不断回收...
#6
C#语法规定就是所有变量的生命期在{...}之内,出去就被垃圾回收器吃掉了,因此循环内的定义在每次循环时都会循环着定义+回收。
#7
up
#8
谢谢大家^-^
我做了一个测试,有两个发现:
1、不管循环多少次,在循环体内部声明的变量所使用的内存地址,仍旧是第一次给它分配的地址。由此可见,不会每次循环都重新声明、回收。
2、就算是循环结束了,循环体中声明的变量也不会被立刻回收。
我做了一个测试,有两个发现:
1、不管循环多少次,在循环体内部声明的变量所使用的内存地址,仍旧是第一次给它分配的地址。由此可见,不会每次循环都重新声明、回收。
2、就算是循环结束了,循环体中声明的变量也不会被立刻回收。
#9
Ivony() 和 ldp333(小李飞飙)
答案是看什么资料有的?能告诉我吗?
我不想每次都花时间做测试,而且不一定准.
答案是看什么资料有的?能告诉我吗?
我不想每次都花时间做测试,而且不一定准.
#10
这个是由编译器负责优化的,你想看资料的话,就去看一些计算机原理和编译原理!
#11
lvony,不好意思,看错名字了,只给你两分,下次有机会补给你啊_!
#12
有没有专门说c#编译器的工作原理的?
#13
可以查看编译后的IL即知……
.NET的编译器在这方面很强的……
.NET的编译器在这方面很强的……