龙空技术网

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

NMLINUX 1119

前言:

此刻咱们对“c语言定义堆栈”都比较重视,兄弟们都需要知道一些“c语言定义堆栈”的相关知识。那么小编在网上网罗了一些关于“c语言定义堆栈””的相关文章,希望各位老铁们能喜欢,我们快快来学习一下吧!

C语言内存分布(内核、变量,堆栈等)

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

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

bss是未初始化的全局变量(在所有函数外申请的变量)和未初始化的静态变量(static修饰的变量)区,例如编写day.c文件int a; int main(void){...return 0;} int day(void){static int b;...return 0;},其中a是未初始化的全局变量,b是未初始化的静态变量。

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

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

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

(C语言内存分布图如图1所示)。

图1、C语言内存分布图

图2、C语言栈图

标签: #c语言定义堆栈