栈(stack) 保存动态分配的自动变量时值,并且栈又操作系统自动分配内存。
测试程序:
cat sum.c
- #include
-
- #include
-
- #include
-
- #define MAX (1UL << 20)
-
-
-
- typedef unsigned long u64;
-
- typedef unsigned int u32;
-
-
-
- u64 max_addend = MAX;
-
-
-
- u64 sum_till_MAX(u32 n)
-
- {
- u64 sum;
-
- n++;
- sum = n;
-
- if(n < max_addend)
-
- sum += sum_till_MAX(n);
-
- return sum;
-
- }
-
-
- int main(int argc, char **argv)
-
- {
- u64 sum = 0;
-
- if((argc == 2) && isdigit(*(argv[1])))
-
- max_addend = strtoul(argv[1], NULL, 0);
-
- if(max_addend > MAX || max_addend == 0){
-
- fprintf(stderr, "Invalid number is specified\n");
-
- return 1;
-
- }
-
-
- sum = sum_till_MAX(0);
-
- printf("sum(0..%lu) = %lu\n", max_addend, sum);
-
- return 0;
-
- }
下面求出从0到10的总和
- $ gcc -o sum -g sum.c
- $ ./sum 10
- sum(0..10) = 55