内存分析

2018-01-26  本文已影响0人  0843d07b95d5

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

程序在运行过程中内存通常分为代码段,全局(静态)存储区(分为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);

      }

上一篇下一篇

猜你喜欢

热点阅读