1.未初始化的全局变量(.bss段)

.bss段用来存放那些没有初始化和初始化为0的全局变量
int bss_array[1024*1024]
int main(int argc,char*argv[])
{
    return 0;
}
变量bss_array的大小为4MB,可执行文件的大小只有5KB,由此可见bss类型全局变量只占运行时的内存空间,而不占用文件空间
现代大多数错做系统在加载程序的时候,会把所有的bss全局变量清0。但为了保证程序的可移植性,手动把这些变量初始化为0
也是一个好习惯,这样一来这些变量都有个确定的初始值,当然作为全局变量,在整个程序的运行周期内,bss数据是一直存在的

2.初始化过的全局变量(.data段)

.data段用来存放那些初始化为非零的全局变量
int bss_array[1024*1024]={1};
int main(int argc,char*argv[])
{
    return 0;
}
上述程序仅仅是把初始化的值改为非零,文件就变为了4MB多,由此可见,data类型的全局变量既占文件空间
又占用运行时的内存空间,同样作为全局变量,在整个运行周期内,data数据是移植存在的

3.常量数据(.rodata)

.rodata段的,ro代表read only ,.rodata段就是用来存放常量数据的,rodata类型的数据注意以下几点:
(1)常量不一定就那个在rodata里,有的立即数直接和指令编码在一起,存放在代码段(.text)
(2)对于字符常量,编译器会自动去除重复的字符串,保证一个字符串在一个可执行文件(EXE/SO)中只存在一份赋值
(3)rodata在多个进程间是共享的,这样可以提高运行空间的利用率
(4)在有的嵌入式系统里面,radata放在ROM里面,(或者NOR Flash)里,运行时直接读取,无须加载到RAM内存中
(5)在嵌入式LINUX系统中,也可以通过一种叫作XIP(就地执行)的技术,直接读取而无须加载到RAM内存中
(6)常量是不能修改的,修改常量在Linux下会出现段错误

4.代码(.text段)

.text段用于存放代码(如函数)和部分整数常量,它与.rodata段很相似,主要不同在于这个段是可以执行的

5.栈 stack

栈用于存放临时变量和函数参数。栈作为一种基本的数据结构,可以用来实现函数的调用,尽管大多数编译器在优化时,会把常用的参数或者局部变量放入寄存器中,但用栈来管理函数调用时的临时变量(局部变量和参数)是通用做法,前者只是辅助手段,且在函数中使用,一旦调用下一层函数,这些值仍然要存入栈中才行。
       通常情况下,栈向下(低地址)增长,每向栈中PUSH一个元素,栈顶就向低地址扩展,每从栈中POP一个元素,栈顶就向高地址回退。存放在栈中的数据只在当前函数和一下层函数中有效,一旦函数返回,这些数据也被自动释放,继续访问这些变阿玲会造成意想不到的错误。

6.堆 heap

堆是最灵活的一种内存,他的生命周期完全由使用者控制,标准的C语言提供了一下几个函数:

  • malloc 用来分配一块指定大小的内存
  • realloc 用来调整/重分配一块存在的内存
  • free 用来释放不再使用的内存

使用堆的时候请注意以下问题。
      malloc/free要配对使用,内存分配之后不释放称为内存泄漏,内存泄漏多了迟早出现"out of memory"的错误,再分配内存就会失败。当然释放时也只能释放分配出来的内存,释放无效的内存或者重复free指令都是不行的,会造成程序崩溃。分配多少内存就是用多少内存,分配了100B就只能使用100B,不管是读还是写,都只能在这个范围内,读多了会读到随机的数据,写多了就对造成随机的破坏,这种情况我们称为缓存区溢出(Buffer Overflow),这是非常严重的,大部分安全问题都是由缓存区溢出引起的。手动检查有没有内存溢出或者缓存区溢出是很困难的,幸好有些工具可以使用。例如Linux下的valgrind,它的使用方法很简单。

C语言中数据放在哪里相关推荐

  1. C语言中数据的表现形式及其运算

    C语言中数据的表现形式及其运算 1. 常量和变量 1.1 常量 在程序运行过程中,其值不能被改变的量称为常量.如1000,0.0036,0.0025是常量.数值常量就是数学中的常量. (1)整型常量. ...

  2. c语言中数据的输入输出格式解析

    数据的输入和输出 在C语言中数据的输入和输出都是通过函数调用来实现的 整型数据的输入输出 调用函数为printf和scanf 格式为printf("%d",x): scanf(&q ...

  3. 解析C语言中数据在内存中的存储

    系列文章目录 文章目录 系列文章目录 前言 一.数据类型介绍 1.类型的基本归类 1.整形家族 2.浮点型家族 3.构造类型 4.指针类型 5.空类型 二.整型在内存中的存储 1.原码.反码.补码 2 ...

  4. c语言科学计数法_C入门:C语言中数据的储存(上)

    How Data is stored in computer memory? 储存数据是计算机进行各种数据操作的基础,为了理解计算机可以对哪些数据进行怎样的操作,有必要了解数据在计算机中的储存方式. ...

  5. 谈谈你对c语言中数据(各种常量,变量,函数参数,字符串)的存储认识,自考《高级语言程序设计》知识点总结(二)...

    2.1 C语言的数据类型 数据类型包含两方面的内容:数据的表示和对数据加工的操作.数据的全部可能表示构成数据类型的值的集合.数据全部合理的操作构成数据类型的操作集合. 在C语言中,把整型.实型和字符型 ...

  6. c语言中静态存储类别是,小议C语言中数据的存储类型

    C语言中的一些说明和定义会用到存储类型这样一个概念,在C语言中存储类型会用到下述几个关键字:auto,static,register,extern. 看下面的简略图大家可以明确程序在进行存储时是分为三 ...

  7. C语言中数据在内存中的存储

    要想了解数据在内存中的存储的话,首先应该了解数据的类型. 下面介绍C语言中数据类型: 1.C语言中的基本内置类型: char //字符数据类型 大小为1个字节 short //短整型 大小为2个字节 ...

  8. c语言中数据常量有哪些,C语言的数值常量是指什么

    满意答案 asdxxmm 2015.09.21 采纳率:57%    等级:6 已帮助:857人 C语言中的数值常量可以简单的分为如下两种整型常量和浮点数常量: 一. 整型常量 如6,27,-299 ...

  9. 关于c语言中数据的存储

    数据的存储首先就要说到数据的类型,类型决定了看待内存空间的视角. c语言的数据类型分为内置类型和外置类型 1.内置类型 (1)整型 char(字符型).short(短整型).int(整型).long( ...

最新文章

  1. servlet知识点
  2. win7中安装mysql_windows7下安装Mysql5.6数据库图文教程(压缩包安装)
  3. 各种登录源码来了!基础登录、验证码登录、小程序登录...全都要!
  4. JavaScript实现bellmanFord贝尔曼-福特算法(附完整源码)
  5. ASP.NET MVC中的模型装配 封装方法 非常好用
  6. python print用法不换行_python3让print输出不换行的方法
  7. php可以控制硬件吗,控制面板的作用是设置硬件接口吗?
  8. RabbitMq的工作模式 介绍+测试代码,以及三种Exchange模式介绍.
  9. golang高并发的理解
  10. flink source 同步_Flink面试题
  11. 【实验记录】EA-MLP(演化算法--全连接神经网络)实验记录
  12. 【渝粤教育】国家开放大学2018年春季 8643-22T数据库基础与应用 参考试题
  13. 2022哈尔滨工程大学软件工程上岸经验贴
  14. Quick BI企业报表制作
  15. Word标题跟随正文样式缩进的解决办法
  16. 常规计算机 符号键是,有谁知道电脑键盘上的标示符号都代表什么意思
  17. 电脑无法连接WiFi,右下角显示红叉解决方法
  18. 数据外泄保护与国土安全部
  19. SSD1306显示屏--躲避类游戏
  20. Windows XP Professional SP3安装版

热门文章

  1. java 动态设置 注解值_动态修改注解(annotation)值
  2. php让视频自动全屏播放,完美解码怎么设置打开视频文件就全屏
  3. 快速学习COSMIC方法之十四:嵌入式软件功能点识别案例
  4. Verizon宣布斥资44亿美元收购AOL,推动LTE无线视频和OTT 策略
  5. SSH 登陆虚拟机VBox
  6. 分布式系列三: 对象序列化
  7. 修复损坏的SQLite数据库文件(database disk image is malformed)
  8. 有效项目治理的快速操作指南
  9. oracle数据库查询需步骤,PLSQL操作Oracle数据库之单表查询SQL语句 看完你就知道了...
  10. 谁有惠普V3432 for 2000的声卡驱动,,救急啊!