内存分析

本文为学习笔记 能力有限 如有错误望指正。谢谢!!!

程序在运行过程中内存通常分为代码段,全局(静态)存储区(分为BSS段和DATA段),堆,栈。


内存分析_第1张图片

代码段:存放程序的二进制代码。

全局(静态)存储区:包括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);

      }

你可能感兴趣的:(内存分析)