本文为学习笔记 能力有限 如有错误望指正。谢谢!!!
程序在运行过程中内存通常分为代码段,全局(静态)存储区(分为BSS段和DATA段),堆,栈。
代码段:存放程序的二进制代码。
全局(静态)存储区:包括BSS(Block Started by Symbol)段,DATA段。BSS段通常指用来存放程序中未初始化的全局变量的内存区域;DATA 段通常指用来存放程序中初始化的全局变量的内存区域。程序结束时由系统释放。
堆:由程序猿自己手动分配和释放。如由malloc(c语言) new(c++或者java)来分配,由free(c 语言)delete(c++)来释放。如果程序员不释放程序结束时由系统释放。
栈:由编译器自动分配和释放。存放函数的参数值和局部变量等,操作类似数据结构中的栈。
举例:
int k=1;//全局变量位于全局(静态)存储区中
void main(){
int i=1;//局部变量位于栈中
char *j;
static int m=1;// 静态变量位于全局(静态)存储区
printf("栈区地址为:0X%x\n", &i);
j=(char*)malloc(2);//malloc分配的区域位于堆中,j指向堆中分配的存储单元
free(j);//及时释放
printf("堆区地址为:0X%x\n", j);
printf("全局变量地址为:0X%x\n", &k);
printf("静态变量地址为:0X%x\n", &m);
printf("程序区地址为:0X%x\n", &main);
}