J*******g 发帖数: 267 | 1 定义下面两个函数
void f1(int num) {
int i = num;
f1(num);
}
boid f2(int num) {
static int i = num;
f2(num);
}
如果在main里面调用这两个函数,有什么区别? |
c**a 发帖数: 316 | 2 f1 死的比较快
【在 J*******g 的大作中提到】 : 定义下面两个函数 : void f1(int num) { : int i = num; : f1(num); : } : boid f2(int num) { : static int i = num; : f2(num); : } : 如果在main里面调用这两个函数,有什么区别?
|
h****n 发帖数: 101 | 3 没试过
1肯定死
2static想来应该会中断吧 |
j*****k 发帖数: 1198 | 4 有区别的。
怎么都是死函数?
第一个要的内存大,最后可能会crash
【在 J*******g 的大作中提到】 : 定义下面两个函数 : void f1(int num) { : int i = num; : f1(num); : } : boid f2(int num) { : static int i = num; : f2(num); : } : 如果在main里面调用这两个函数,有什么区别?
|
O*******d 发帖数: 20343 | 5 2也会死掉。parameter是在stack上。
【在 h****n 的大作中提到】 : 没试过 : 1肯定死 : 2static想来应该会中断吧
|
j*****k 发帖数: 1198 | 6 嗯,不过死得慢
【在 O*******d 的大作中提到】 : 2也会死掉。parameter是在stack上。
|
J*******g 发帖数: 267 | 7 如果把f2改成这样呢?
void f2(){
static int i = 1;
f2();
}
【在 O*******d 的大作中提到】 : 2也会死掉。parameter是在stack上。
|
D*******a 发帖数: 3688 | 8 这不还是爆stack么?
【在 J*******g 的大作中提到】 : 如果把f2改成这样呢? : void f2(){ : static int i = 1; : f2(); : }
|
k****f 发帖数: 3794 | 9 f2编译过不去的,所以没法死机的
【在 J*******g 的大作中提到】 : 定义下面两个函数 : void f1(int num) { : int i = num; : f1(num); : } : boid f2(int num) { : static int i = num; : f2(num); : } : 如果在main里面调用这两个函数,有什么区别?
|
j*****k 发帖数: 1198 | 10 一样地死,只不过稍微慢点
【在 J*******g 的大作中提到】 : 如果把f2改成这样呢? : void f2(){ : static int i = 1; : f2(); : }
|
O*******d 发帖数: 20343 | 11 function call 本身就要在stack上用内存。
【在 J*******g 的大作中提到】 : 如果把f2改成这样呢? : void f2(){ : static int i = 1; : f2(); : }
|
x****u 发帖数: 44466 | 12 貌似某些编译器能把这样的尾递归展开吧。
【在 O*******d 的大作中提到】 : function call 本身就要在stack上用内存。
|