经典案例
申博-申博网址登入-申博官方网站下载 常见问题

C语言内存分布(内核区、堆栈区等)

发布于:2019-11-07 05:04来源: 作者:

C语言内存分布

内核区是提供给操作系统使用的。栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数;程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹出栈,压栈-栈指针指向此次所压数据的最底端;出栈-栈指针指向此次所压数据的最顶端,栈区向下增长即数据随着压栈往下存储。局部变量的作用范围是函数调用时生效,函数退出时失效。

动态链接库是程序运行时所需的库。堆区是函数malloc申请的内存区,堆区向上增长即随着malloc申请的次数曾多往上占用空间。

bss是未初始化的全局变量和未初始化的静态变量区,例如编写day.c文件int a; int main{...return 0;} int day{static int b;...return 0;},其中a是未初始化的全局变量,b是未初始化的静态变量。

data区是已初始化的全局变量和已初始化的静态变量区,例如前面的int a=112;...static int b=113;...,其中a是已初始化的全局变量,b是已初始化的静态变量。

只读数据区是给字符串常量存储的,例如字符串“Hello NMLINUX”等。

代码区是给正在运行或者将要运行的程序用的。

图1、C语言内存分布图

图2、C语言栈图

tag标签:
------分隔线----------------------------
------分隔线----------------------------