c语言的内存分配
2015-08-23 17:52
232 查看
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
数据段:数据段(data segment)通常是指用来存放程序中已初始化的全区变量和静态变量的一块内存区域。数据段属于静态内存分配。
代码段:代码段(code segment/text segment)指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读和执行
堆:堆(heap)用来存放进程运行中被动态分配的内存段,它的大小并不固定。
栈(stack):又称堆栈,存放程序的局部变量(但是不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,栈用来传递参数和返回值。
每次循环的差别就在于b,b是静态变量,存放在数据段,一旦定义,b就只有一个,程序里面对b有改变,则b的值就会变化,在循环过程中b每次加2,同时,静态变量的定义只有一次。
而c是局部变量,相当于int c ,存放在栈里面,当其所在块的大括号运行完后 c消失,每次在循环调用时需要重新定义。
数据段:数据段(data segment)通常是指用来存放程序中已初始化的全区变量和静态变量的一块内存区域。数据段属于静态内存分配。
代码段:代码段(code segment/text segment)指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读和执行
堆:堆(heap)用来存放进程运行中被动态分配的内存段,它的大小并不固定。
栈(stack):又称堆栈,存放程序的局部变量(但是不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,栈用来传递参数和返回值。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> int sum(int a) { auto int c = 0; static int b = 3; c += 1;// 1 b += 2;// 5 //printf("b = %d, c = %d\n",b, c); return(a+b+c); //8 } void main() { int i; int a = 2; for(i = 0; i < 5; i++) { printf("%d,", sum(a)); } getchar(); getchar(); }运行结果8,10,12,14,16
每次循环的差别就在于b,b是静态变量,存放在数据段,一旦定义,b就只有一个,程序里面对b有改变,则b的值就会变化,在循环过程中b每次加2,同时,静态变量的定义只有一次。
而c是局部变量,相当于int c ,存放在栈里面,当其所在块的大括号运行完后 c消失,每次在循环调用时需要重新定义。
相关文章推荐
- C++ STL lower_bound()返回值
- C语言中,数组名作为参数传递给函数时,退化为指针
- C,C++开源项目中的100个Bugs
- [LeetCode] Insert Interval
- Effective C++ 条款19 设计class犹如设计type
- C语言学习
- 2016年阿里C/C++开发笔试程序题三
- hdu5418 最短哈密顿回路
- C++的构造函数和析构函数
- C++中的单例模式
- c++ STL unique , unique_copy函数
- 2016年阿里C/C++开发笔试程序题一
- C++ STL vector(向量容器)的使用(附完整程序代码)
- C++学习——vector
- gcc连接文件error: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.X.XX‘ not found
- Effective C++ 条款18 让接口容易被正确使用,不易被误用
- [LeetCode] Merge Intervals
- 浅谈C++设计模式之抽象工厂(Abstract Factory)
- C++:构造函数和析构函数能否为虚函数
- C++类中的const和static