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++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)相关推荐

  1. was修改堆内存_C语言内存泄露很严重,如何应对?

    摘要:通过介绍内存泄漏问题原理及检视方法,希望后续能够从编码检视环节就杜绝内存泄漏导致的网上问题发生. 1. 前言 最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因 ...

  2. c语言malloc函数用法_C语言内存模型!小本本记起来啊!

    一.C语言的内存分配模型 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全 ...

  3. vs使用未初始化的内存怎么解决_C语言内存管理(转载)

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

  4. C语言与JAVA内存管理_C语言内存管理

    本章将介绍C语言动态内存管理. C语言编程语言提供了多种功能的内存分配和管理.这些函数可以在头文件中找到. S.N. 函数与说明 1 void *calloc(int num, int size); ...

  5. 内存spd规范_C语言内存泄露很严重,如何应对?

    原文: https://blog.csdn.net/devcloud/article/details/108335912 1.前言 最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网 ...

  6. vs使用未初始化的内存怎么解决_C语言内存操作陷阱总结

    微信公众号:二进制人生 专注于嵌入式linux开发. 更新:2020/07/21,内容整理自网络. 1.返回局部变量的地址,或者返回指向局部变量的指针 int *stackref(){ int val ...

  7. c语言获取系统剩余内存_C语言编程中的“堆”和“栈”七大不同之处

    更多精彩,请点击上方蓝字关注我们! 对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等.初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体 ...

  8. 释放变量所指向的内存_C++动态内存分配(学习笔记:第6章 15)

    动态内存分配[1] 动态申请内存操作符 new new 类型名T(初始化参数列表) 功能: 在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值. 结果值: 成功:T类型的指针,指向 ...

  9. C语言内存管理超详解

    补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...

最新文章

  1. inux php pdo mysql 扩展
  2. 记一次suse linux崩溃
  3. VTK:PolyData之CellTreeLocator
  4. Extjs 动态改变列名
  5. 在MongoDB中存储分层数据
  6. Exynos4412 内核移植(二)—— 内核编译过程分析
  7. 04-Flutter移动电商实战-打通底部导航栏
  8. 51Nod 1530 稳定方块
  9. The command (dfs.browser.action.delete) is undefined 解决Hadoop Eclipse插件报错
  10. adb 黑域app_黑域app怎么用?新版黑域app使用图文教程
  11. Vue监听浏览器刷新
  12. SpringBoot静态资源处理(九)
  13. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  14. DFS.01-寻路问题
  15. system mysql服务
  16. [AGC048D]Pocky Game
  17. Opencv调整运行窗口图片的大小
  18. 关于element-ui的el-table某列不显示或错乱问题
  19. 几种数字传感器介绍(一)————温湿度传感器(HDC1080)
  20. 程序员该如何应对大龄危机

热门文章

  1. yum安装elasticsearch慢_ELK elasticsearch yum 安装(4th)
  2. unity 镜面反射_Unity | Diffuse Light漫反射光照
  3. 常见的网站布局方式---左固定右自适应、左右固定中自适应等
  4. android.os.log,android.os.Handler和java.util.logging.Handler之间的区别?
  5. Java基础02 位运算符<<、>>
  6. deeplink唤醒app测试软件,DeepLink唤醒App的简单实现方法
  7. 【NLP】毕设学习笔记(二)transformer
  8. 3_Long Short Term Memory (LSTM)
  9. W10系统matlab无法保存对该路径的更改 pathdef_MATLAB的运行与窗口介绍
  10. 工程桩基围护知识_地基基础工程专业承包资质