1.数据段:
用来存放可执行文件中已初始化的全局变量,换句话说就是存放程序静态分配的变量和全局变量;
2.代码段:
代码段是用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只允许读取操作,而不允许写入(修改)操作-----它是不可写的;
3.BSS段:
包含了程序中未初始化的全局变量,在内存中bss段全部置零;
4.堆(heap):
堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可以动态扩展或者所建。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩展);当利用free等函数释放内存时,被释放的内存从堆中被提出(堆被缩减);
5.栈:
栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧中定义的变量(但是并不包括static声明的变量,static意味着在数据段中存放变量).除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出的特点,所以栈特别方便用来保存/回复调用现场。从这个意义上讲,我们可以把栈看成一个寄存,交换临时数据的内存区。它是由操作系统分配的,内存的申请与回收都由OS管理。
最后,希望有兴趣的童鞋能够通过本文有所启发,那就再好不过了.如果还有童鞋有什么疑问,可以关注微信公众号Yongf
或者扫描下面的二维码关注下,在上面留下问题,我看到都会回答的.